2017-12-13 15:49:24 m0_37412958 阅读数 911
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    28179 人正在学习 去看看 秦子恒
所有微信开发的相关内容,都需要参考官方文档。

[微信公众平台|开发文档] http://mp.weixin.qq.com/wiki/home/

一、通过网页授权,可以获取用户微信的基本信息。

二、总共有5个步骤:

1 :用户同意授权,获取code

2 :通过code换取网页授权access_token

3 :刷新access_token(如果需要)

4 :拉取用户信息(需scope为 snsapi_userinfo)

5 附:检验授权凭证(access_token)是否有效

三、每一个步骤的实现。

1 :用户同意授权,获取code

[php] view plain copy
  1. /** 
  2.      * @explain 
  3.      * 获取code,用于获取openid和access_token 
  4.      * @remark 
  5.      * code只能使用一次,当获取到之后code失效,再次获取需要重新进入 
  6.      * 不会弹出授权页面,适用于关注公众号后自定义菜单跳转等,如果不关注,那么只能获取openid 
  7.      **/  
  8.     public function getCode()  
  9.     {  
  10.         if (isset($_GET["code"])) {  
  11.             return $_GET["code"];  
  12.         } else {  
  13.             $str = "location: https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=" . $this->index_url . "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";  
  14.             header($str);  
  15.             exit;  
  16.         }  
  17.     }  

2 :通过code换取网页授权access_token

[php] view plain copy
  1. /** 
  2.      * @explain 
  3.      * 用于获取access_token,返回的<span style="font-family: Arial, Helvetica, sans-serif;">$access_token_array中也包含有用户的openid信息。</span> 
  4.  
  5.      **/  
  6.     public function getOpenId()  
  7.     {  
  8.         $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $this->code . "&grant_type=authorization_code";  
  9.         $access_token_json = $this->https_request($access_token_url);  
  10.         $access_token_array = json_decode($access_token_json, TRUE);  
  11.         return $access_token_array;  
  12.     }  

3 :刷新access_token(如果需要)

这一步直接略过。

4 :拉取用户信息(需scope为 snsapi_userinfo)

[php] view plain copy
  1. /** 
  2.      * @explain 
  3.      * 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token 
  4.      **/  
  5.     public function getUserInfo()  
  6.     {  
  7.           
  8.         $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token['access_token'] ."&openid=" . $this->access_token['openid']."&lang=zh_CN";  
  9.         $userinfo_json = $this->https_request($userinfo_url);  
  10.         $userinfo_array = json_decode($userinfo_json, TRUE);  
  11.         return $userinfo_array;  
  12.     }  
至此四个步骤全部完成。


四、完整代码。实际项目使用TP3.2.3。

[php] view plain copy
  1. <?php  
  2.   
  3. namespace Wechat\Controller;  
  4.   
  5. use Think\Controller;  
  6.   
  7. //微信接口基础类,其他微信类都继承这个基础类。可以自动判断用户状态,获取用户信息。  
  8. class WxbaseController extends Controller  
  9. {  
  10.   
  11.     public $appid = 'wxba09d9f0fed4b84b';                   //微信APPID,公众平台获取  
  12.     public $appsecret = '332c2b1fc1eb282c0136b73723db4237'//微信APPSECREC,公众平台获取  
  13.     public $index_url = "http://www.你的域名.cn/项目目录/index.php?m=分组&c=控制器&a=方法";  //微信回调地址,要跟公众平台的配置域名相同  
  14.     public $code;  
  15.     public $openid;  
  16.   
  17.     /**  
  18.      *检测有无$_SESSION。<span style="font-family: Arial, Helvetica, sans-serif;">如果有,直接忽略。</span>  
  19.      *如果没有$<span style="font-family:Arial, Helvetica, sans-serif;">_SESSION</span>,就依次执行getCode、getOpenId、getUserInfo来获取用户信息。目的是解决CODE只能获取一次,刷新页面openid会丢失的问题。  
  20.      *再判断是否在数据库中,没有则写入数据库。最后将open_id写入session。  
[php] view plain copy
  1. <span style="white-space:pre">    </span>*/  
  2.     public function _initialize()  
  3.     {  
  4.             if (!$_SESSION['openid']) {                             //如果$_SESSION中没有openid,说明用户刚刚登陆,就执行getCode、getOpenId、getUserInfo获取他的信息  
  5.                 $this->code = $this->getCode();  
  6.                 $this->access_token = $this->getOpenId();  
  7.                 $userInfo = $this->getUserInfo();  
  8.                 if ($userInfo) {  
  9.                     $ins = M('Wechat_user_info');<span style="white-space:pre">       </span>    //其他框架请自行调整方法。  
  10.                     $map['openid'] = $userInfo['openid'];  
  11.                     $result = $ins->where($map)->find();            //根据OPENID查找数据库中是否有这个用户,如果没有就写数据库。继承该类的其他类,用户都写入了数据库中。  
  12.                     if (!$result) {  
  13.                         $ins->add($userInfo);  
  14.                     }  
  15.                     session('openid'$userInfo['openid']);         //写到$_SESSION中。微信缓存很坑爹,调试时请及时清除缓存再试。  
  16.                 }  
  17.             }  
  18.   
  19.     }  
  20.   
  21.     /** 
  22.      * @explain 
  23.      * 获取code,用于获取openid和access_token 
  24.      * @remark 
  25.      * code只能使用一次,当获取到之后code失效,再次获取需要重新进入 
  26.      * 不会弹出授权页面,适用于关注公众号后自定义菜单跳转等,如果不关注,那么只能获取openid 
  27.      **/  
  28.     public function getCode()  
  29.     {  
  30.         if (isset($_GET["code"])) {  
  31.             return $_GET["code"];  
  32.         } else {  
  33.             $str = "location: https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=" . $this->index_url . "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";  
  34.             header($str);  
  35.             exit;  
  36.         }  
  37.     }  
  38.   
  39.     /** 
  40.      * @explain 
  41.      * 用于获取用户openid 
  42.      **/  
  43.     public function getOpenId()  
  44.     {  
  45.         $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $this->code . "&grant_type=authorization_code";  
  46.         $access_token_json = $this->https_request($access_token_url);  
  47.         $access_token_array = json_decode($access_token_json, TRUE);  
  48.         return $access_token_array;  
  49.     }  
  50.   
  51.     /** 
  52.      * @explain 
  53.      * 通过code获取用户openid以及用户的微信号信息 
  54.      * @return 
  55.      * @remark 
  56.      * 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token 
  57.      * access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效 
  58.      **/  
  59.     public function getUserInfo()  
  60.     {  
  61.   
  62.         $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token['access_token'] ."&openid=" . $this->access_token['openid']."&lang=zh_CN";  
  63.         $userinfo_json = $this->https_request($userinfo_url);  
  64.         $userinfo_array = json_decode($userinfo_json, TRUE);  
  65.         return $userinfo_array;  
  66.     }  
  67.   
  68.   
  69.     /** 
  70.      * @explain 
  71.      * 发送http请求,并返回数据 
  72.      **/  
  73.     public function https_request($url$data = null)  
  74.     {  
  75.         $curl = curl_init();  
  76.         curl_setopt($curl, CURLOPT_URL, $url);  
  77.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);  
  78.         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);  
  79.         if (!empty($data)) {  
  80.             curl_setopt($curl, CURLOPT_POST, 1);  
  81.             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);  
  82.         }  
  83.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  84.         $output = curl_exec($curl);  
  85.         curl_close($curl);  
  86.         return $output;  
  87.     }  
  88. }  

2018-12-17 16:00:39 qq_35713752 阅读数 1253
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    28179 人正在学习 去看看 秦子恒

微信小程序开发交流qq群   173683895

   承接微信小程序开发。扫码加微信。

向页面 test.php 发送数据,并输出结果(HTML 或 XML,取决于所返回的内容):
 

$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
     $(".result").html(data);
});

示例二: ajax请求

// 需要引入
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
 
$.ajax({  
    type: "POST",  
    url: "",  
    contentType: 'application/x-www-form-urlencoded;charset=utf-8',  
    data: {},  
    dataType: "json",  
    success: function(data){  
        console.log(data);  
    },  
    error:function(error){  
        console.log(error);  
    }  
}); 

 

2017-11-10 14:28:38 SugaryoTT 阅读数 1022
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    28179 人正在学习 去看看 秦子恒

写在前面的

   如果平时开发有用到微信接口的小伙伴肯定遇到过一些需要跨域访问申请Token或者Ticket的问题,由于.NET或者JAVASE本身封装了一些web工具类,所以在使用跨域调用的时候只需要设置一些参数即可。但是,如果使用JS来进行跨域调用需要怎样进行?下面贴代码。

使用AJAX实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>使用Ajax来实现跨域申请AccessToken</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <script type="text/javascript">
    function ajax(){
        var _appid = "这里是公众号的APPID"; 
        var _appsecret = "这里键入你微信公众号的APPSecret"; 
        var _url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + _appid + "&secret=" + _appsecret; 
         $.ajax({ 

            url:_url,
            type:"get",
            dataType:'jsonp', <!--jsonp是Ajax专门为了应对跨域而提供的一个解决方案-->
            crossDomain:true, <!--将Ajax的跨域访问参数置为True-->
            success:function(data){
                alert(data);
            },
            error:function(data){
                console.log(data);
            }

         })

     }
     </script>
<body>
      <form method=get action="">
        <input type="button" value="点我进行跨域"  onclick="ajax();"/>
      </form>
</body>
</html>

测试结果

如果测试成功,那么在console中就会出现刚刚申请的热乎乎的Access_Token
这里写图片描述
这里写图片描述

总结

   单纯使用jsonp可以解决跨域问题,但是我们并不推荐这种方法,由于跨域调用会出现很多无法预料的安全问题,json在返回的过程中非常容易遭到非法拦截,所以还需要使用其他的辅助手段来进行加密,或尽可能的在结构上避免跨域调用的出现。

2018-10-16 11:57:55 qq_35713752 阅读数 1091
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    28179 人正在学习 去看看 秦子恒

微信小程序开发交流qq群   173683895

   承接微信小程序开发。扫码加微信。

 

代码

		<div class="apply_box">
			<h1>合作申请</h1>
			<div class="apply_l">
				<input type="text" maxlength="20" id="name" name="name" placeholder="您的姓名">
				<input type="number" maxlength="14" id="phone" name="phone" placeholder="您的电话">
				<input type="text" id="company" name="company" placeholder="您的公司">
			</div>
			<div class="apply_r">
				<textarea name="detail" id="detail" cols="30" rows="10" placeholder="需要咨询的合作"></textarea>
				<input type="submit" id="sub" value="提交申请">
			</div>
			<script type="text/javascript">
				$('#sub').click(function() {
					var aa = $("#detail").val();
					console.log(aa)
					$.post("https:/xxx.cn/api/xxx.do", {
							name: $("#name").val(),
							phone: $("#phone").val(),
							company: $("#company").val(),
							page: 'index',
							detail: aa,
						},
						function(data) {
							alert("Data: " + data);
						});
				});
			</script>
		</div>

注意:JQ获取textarea的值的时候,在post里面无法通过$("#detail").val()获取到值,需要在事件创建一个变量获取它;

实现:post提交表单通过JQ的AJAX提交,达到不刷新,不跳转页面的效果

不能加form 。

2017-04-25 18:58:27 aSuncat 阅读数 2732
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    28179 人正在学习 去看看 秦子恒

一、思路:
1、获取企业code.
2、利用后台传过来的access_token,结合code,获取openId.
二、代码

//获取openId
$(function(){
  //获取location.href中的code
  var code = location.href.split('?')[1].split('&')[0].split('=')[1];
  console.log(code);
  //后台获取access_token

//后台还没有给我,给我之后我再写一下
  // var access_token=access_token;


  //根据code获取openId
  function changeCode(){
    $.ajax({
      type:'GET',
      url:'https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token='+access_token+'&code='+code,
      dataType:'json',
      success:function(data){
        if(data.success){
          var openId;
          //如果是企业成员授权,返回userId,转为openId,
          //如果是非企业成员授权,返回openId
          if(data.UserId){
            var userId=data.UserId;
            //userId装换为openId
            $.ajax({
              type:'POST',
              url:'https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token='+access_token,
              dataType:'json',
              data:{
                userid:userId
              },
              success:function(data){
                if(data.success){
                  openId=data.openid
                }
              }
            });
          }else{
            openId=data.OpenId;
          }
        }else{
          console.log('获取接口失败');
        }
      },
      error:function(jqXHR){
        console.log('发生错误:'+jqXHR.status);
      }
    });
  }
});

三、微信接口文档
地址:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth验证接口
四、关键点
这里写图片描述
标红的地方就是location.href获取到的值。
五、参考文档:http://blog.csdn.net/wenxuechaozhe/article/details/52104285

jquery jsonp跨域调用接口

博文 来自: u013053949
没有更多推荐了,返回首页