配置服务器域名
身份认证 只要给了权限的管理员都可以扫码操作 不一定要账户所属者
tips:com后面不要加 / 不然容易爆红不合法域名,去掉斜杠就好了
获取手机号码
小程序通过 bindgetphonenumber 获取加密数据
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" class="btn">立即绑定</button>
/**通过 bindgetphonenumber 进行获取加密数据**/
通过wx.login 获取code 进行服务器交互
wx.login({
success:(res=>{
console.log("wx_login",res);
wx.request({
url: app.globalData.base_url+'index/wx_login/checkLoginPhone', // 获取微信手机号
data: {
"code": res.code,
"encryptedData": e.detail.encryptedData,
"iv":e.detail.iv,
},
method: 'POST',
header: {
'content-type': 'application/json'
},
success:(res)=>{
console.log("获取手机号码成功:",res.data);
if(res.data.data.phoneNumber){
wx.showToast({
title: res.data.msg,
mask:true,
duration:1000,
icon:'none'
})
that.setData({
tel:res.data.data.phoneNumber
})
var openid = wx.getStorageSync('openid')
console.log("上传的openid",openid);
// 获取手机号之后进行登录信息绑定
wx.request({
url: app.globalData.base_url+'index/wx_login/getUserInfo',
data: {
"code": res.code,
"openid":openid.openid,
"tel":that.data.tel
},
method: 'POST',
header: {
'content-type': 'application/json'
},
success:(res)=>{
console.log("绑定成功",res);
if(res.data.code == 200){
wx.setStorageSync('userInfo', res.data.data);
that.setData({
isUserInfo:true,
userInfo:res.data.data
})
}else{
wx.showToast({
title: res.data.msg,
mask:true,
duration:2000,
icon:'none'
})
}
}
})
}else{
wx.showToast({
title: res.data.data.message+' 请重新绑定',
mask:true,
duration:2000,
icon:'none'
})
}
}
})
}),
fail: function (res) {
console.log(res.data);
console.log('is failed')
}
})
上传的openid 获取之法
getOpenid(){
wx.login({
success:(res)=>{
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid='+this.globalData.APPID+'&secret='+this.globalData.SECRET+'&js_code='+res.code+'&grant_type=authorization_code',
method: 'POST',
header: {
'content-type': 'application/json'
},
success:(res)=>{
console.log("oepdnid",res.data.data.openid);
// return res.data.data.openid
wx.setStorageSync('openid',res.data.data.openid)
}
})
}
})
},
后台解密手机号码
//检查登陆的手机号
public function checkLoginPhone($code, $encryptedData, $iv) {
/**
* 4.server调用微信提供的jsoncode2session接口获取openid, session_key, 调用失败应给予客户端反馈
* , 微信侧返回错误则可判断为恶意请求, 可以不返回. 微信文档链接
* 这是一个 HTTP 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。其中 session_key 是对用户数据进行加密签名的密钥。
* 为了自身应用安全,session_key 不应该在网络上传输。
* 接口地址:"https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code"
*/
$params = [
'appid' => $this->config['appid'],
'secret' => $this->config['secret'],
'js_code' => $code,
'grant_type' => $this->config['grant_type']
];
$res = $this->makeRequest($this->config['url'], $params);
if ($res['code'] !== 200 || !isset($res['result']) || !isset($res['result'])) {
return ['code'=>ErrorCode::$RequestTokenFailed, 'message'=>'请求Token失败'];
}
$reqData = json_decode($res['result'], true);
if (!isset($reqData['session_key'])) {
return ['code'=>ErrorCode::$RequestTokenFailed, 'message'=>'请求Token失败'];
}
$sessionKey = $reqData['session_key'];
/**
*
* 6.使用第4步返回的session_key解密encryptData, 将解得的信息与rawData中信息进行比较, 需要完全匹配,
* 解得的信息中也包括openid, 也需要与第4步返回的openid匹配. 解密失败或不匹配应该返回客户相应错误.
* (使用官方提供的方法即可)
*/
$pc = new WXBizDataCrypt($this->config['appid'], $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data,$sessionKey,$this->config['appid']);
if ($errCode !== 0) {
return ['code'=>$errCode, 'message'=>'解密信息错误'];
}
/**
* 7.生成第三方3rd_session,用于第三方服务器和小程序之间做登录态校验。为了保证安全性,3rd_session应该满足:
* a.长度足够长。建议有2^128种组合,即长度为16B
* b.避免使用srand(当前时间)然后rand()的方法,而是采用操作系统提供的真正随机数机制,比如Linux下面读取/dev/urandom设备
* c.设置一定有效时间,对于过期的3rd_session视为不合法
*
* 以 $session3rd 为key,sessionKey+openId为value,写入memcached
*/
$data = json_decode($data, true);
$session3rd = $this->create3rd_session(16);
// $session3rd = $this->randomFromDev(16);
$data['session3rd'] = $session3rd;
// cache($session3rd, $data['openId'] . $sessionKey);
return $data;
}
腾讯地图
获取key
获取当前经纬度 返回地址文字
/**
* 定位
*/
handleLocation(){
var that = this
wx.getLocation({
type: 'wgs84', //返回可以用于wx.openLocation的经纬度
success (res) {
var getAddressUrl = "https://apis.map.qq.com/ws/geocoder/v1/?location=" + res.latitude + "," + res.longitude + "&key=自己的key";
wx.request({
url: getAddressUrl,
data:{
"sig":'这个是签名验证 可忽略 我用的是加白名单域名'
},
success: function (result) {
console.log("result:",result)
that.setData({
address:result.data.result.address
})
}
})
}
})
}
添加域名白名单
成功
本文来自博客园,作者:depressiom,转载请注明原文链接:https://www.cnblogs.com/depressiom/p/16354873.html