小程序js:
//app.js
App({
onLaunch: function () {
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
wx.login({
success: function(res) {
if (res.code) {
//发起网络请求
wx.getUserInfo({
success: function(ures) {
var userInfo = ures.userInfo
var nickName = userInfo.nickName
var avatarUrl = userInfo.avatarUrl
var gender = userInfo.gender //性别 0:未知、1:男、2:女
var province = userInfo.province
var city = userInfo.city
var country = userInfo.country
wx.request({
url: 'https://m.xxx.com/index.php',
data: {
m: 'api',
c: 'wechat' ,
a: 'xcx_do_auth',
code: res.code,
rawData: ures.rawData,
encryptData: ures.encryptData,
encryptedData: ures.encryptedData,
iv: ures.iv,
signature: ures.signature
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
success: function(lres) {
console.log(lres.data)
}
})
//request
}
})
//getUserInfo
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
//login
}
});
wx.checkSession({
success: function(){
//登录态未过期
},
fail: function(){
//登录态过期
wx.login()
}
});
},
globalData:{
userInfo:null,
ajaxUrl: "https://m.xxx.com/index.php",
baseUrl: "https://www.xxx.com/",
code : null,
pageNum : 1,
}
})
php
//获取session_key
function xcx_openid_session_key($code)
{
require_once ROOT_PATH.'/weixin/wxHelper.php';
$wxHelper = new wxHelper();
//小程序配置参数
$xcxConfig = include_once ROOT_PATH.'/weixin/xcxConfig.php';
//crul
$result = $wxHelper->httpGet("https://api.weixin.qq.com/sns/jscode2session?appid={$xcxConfig['AppId']}&secret={$xcxConfig['AppSecret']}&js_code=$code&grant_type=authorization_code");
$result = json_decode($result, true);
if(!empty($result['openid'])){
$res['AppId'] = $xcxConfig['AppId'];
$res['AppSecret'] = $xcxConfig['AppSecret'];
$res['session_key'] = $result['session_key'];
$res['openid'] = $result['openid'];
}else{
$res['errcode'] = 1;
$res['errmsg'] = 'no openid';
}
return $res;
}
//登录
public function xcx_do_auth()
{
$msg = array();
$code = $_REQUEST['code'];
$rawData = $_REQUEST['rawData'];
$signature = $_REQUEST['signature'];
$encryptData = $_REQUEST['encryptData'];
$encryptedData = $_REQUEST['encryptedData'];
$iv = $_REQUEST['iv'];
//验证code
if(empty($code))
{
$msg['error'] = '106';
$msg['msg'] = 'lack of the param code';
die(json_encode($msg));
}
//请求微信服务器,获取openid和session_key
$result = xcx_openid_session_key($code);
if(empty($result['errmsg'])){
$rawData2 = str_replace("\\", "", $rawData);
$rawData3 = $rawData2.$result['session_key'];
$signature2 = sha1($rawData3);
if($signature == $signature2){
include_once(ROOT_PATH."/weixin/wxBizDataCrypt.php");
$pc = new WXBizDataCrypt($result['AppId'], $result['session_key']);
$lastData = $pc->decryptData($encryptedData, $iv, $data );
if (empty($lastData['errorMsg'])) {
$lastDataArr = json_decode($lastData, true);
$lastDataArr2['openid'] = $lastDataArr['openId'];
$lastDataArr2['nickName'] = $lastDataArr['nickName'];
$lastDataArr2['sex'] = $lastDataArr['gender'];
$lastDataArr2['language'] = $lastDataArr['language'];
$lastDataArr2['city'] = $lastDataArr['city'];
$lastDataArr2['province'] = $lastDataArr['province'];
$lastDataArr2['country'] = $lastDataArr['country'];
$lastDataArr2['headimgurl'] = $lastDataArr['avatarUrl'];
$lastDataArr2['unionid'] = $lastDataArr['unionId'];
self::update_xcxweixin_user($lastDataArr2); //更新用户信息
die($_SESSION['user_id']);
} else {
$msg['error'] = '106';
$msg['msg'] = 'lack of the param unionId';
die(json_encode($msg, true));
}
}else{
$msg['error'] = '106';
$msg['msg'] = 'lack of the param signature';
die(json_encode($msg));
}
}else{
$msg['error'] = '106';
$msg['msg'] = 'lack of the param openid';
die(json_encode($msg));
}
}