首先呢,先进入微信公众平台,获取APPID和APPsecret。
1、控制器
进入自己的项目中,创建一个控制器,WeChatPay.class.php;具体代码如下
/*
* 这里接受两个参数,signature => 签名,code =>
*/
public functionwxLogin($code='', $signature='') {
$APPID = C('WX.appid');
$AppSecret = C('WX.AppSecret');
$url ="https://api.weixin.qq.com/sns/jscode2session?appid=".$APPID."&secret=".$AppSecret."&js_code=".$code."&grant_type=authorization_code";
$arr = curlGet($url); //一个使用curl实现的get方法请求
$arr = json_decode($arr,true);
$openid = $arr['openid']; //微信openid
$session_key = $arr['session_key'];
$rawData = $_GET['rawData'];
//数据签名校验
$signature2 = sha1($rawData.$session_key); //记住不应该用TP中的I方法,会过滤掉必要的数据
if ($signature != $signature2) {
echo '-1'.','.'数据签名验证失败';die;
}
//开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密
Vendor("PHP.wxBizDataCrypt"); //加载解密文件,在官方有下载
$encryptedData = $_GET['encryptedData'];
$iv = $_GET['iv'];
$pc = new \WXBizDataCrypt($APPID, $session_key);
$errCode = $pc->decryptData($encryptedData, $iv, $data); //其中$data包含用户的所有数据
if ($errCode != 0) {
echo '-1'.','.'解密数据失败';die;
}else {
//用户信息入库,这里我将用户的基本信息存入数据库中
$wxuser = M('users');
$user_info = $wxuser->where(array('openid'=>$openid))->find();
$user_id = $user_info['user_id'];
$raw = json_decode($rawData,true);
$raw['nickname'] = trim($raw['nickName']);
$raw['name'] = $raw['nickName'];
$raw['last_time'] = time();
$new_user = 0; //老用户
if(!$user_info){
$raw['openid'] = $openid;
$raw['add_time'] = time();
$user_id =$wxuser->add($raw); //新用户id
if(!$user_id){
echo '-1'.','.'服务器出错,授权失败。';die;
}
$new_user = 1; //新用户
}else {
$ures =$wxuser->where(array('user_id'=>$user_id))->setField($raw);
}
$nickName = $raw['nickName']?:$user_info['nickName']; //用户昵称
}
//生成第三方3rd_session
$session3rd = null;
$strPol ="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($strPol)-1;
for($i=0;$i<16;$i++){
$session3rd .=$strPol[rand(0,$max)];
}
$result = '1'.','.$session3rd.','.$user_id.','.$nickName.','.$new_user;
echo $result;die;
}
2、配置文件
我把配置文件放在了 Common/Conf/config.php 里面
3、SDK
SDK后面再上传
到这里小程序授权就全部完成了。