700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信小程序python解析获取用户手机号_微信小程序获取用户手机号

微信小程序python解析获取用户手机号_微信小程序获取用户手机号

时间:2019-02-03 06:13:08

相关推荐

微信小程序python解析获取用户手机号_微信小程序获取用户手机号

获取微信用户绑定的手机号,需先调用wx.login接口。

小程序获取code。

后台得到session_key,openid。

组件触发getPhoneNumber

因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 组件的点击来触发。

需要将 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

tips:

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

Page({

getPhoneNumber(e) {

console.log(e.detail.errMsg)

console.log(e.detail.iv)

console.log(e.detail.encryptedData)

}

})

encryptedData 解密

encryptedData 解密后为以下 JSON 结构

{

"phoneNumber": "13580006666",

"purePhoneNumber": "13580006666",

"countryCode": "86",

"watermark": {

"appid": "APPID",

"timestamp": TIMESTAMP

}

}

小程序可以通过各种前端接口获取微信提供的开放数据。考虑到开发者服务器也需要获取这些开放数据,微信会对这些数据做签名和加密处理。开发者后台拿到开放数据后可以对数据进行校验签名和解密,来保证数据不被篡改。

签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。

接口返回的加密数据(encryptedData) 进行对称解密。 解密算法如下:

对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。

对称解密的目标密文为 Base64_Decode(encryptedData)。

对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。

对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。

会话密钥 session_key 有效性

开发者如果遇到因为 session_key 不正确而校验签名失败或解密失败,请关注下面几个与 session_key 有关的注意事项。

wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要重新登录时才调用 wx.login,及时通过 code2Session 接口更新服务器存储的 session_key。

微信不会把 session_key 的有效期告知开发者。我们会根据用户使用小程序的行为对 session_key 进行续期。用户越频繁使用小程序,session_key 有效期越长。

开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的 session_key。使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程。

当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

/**

* 对微信小程序用户加密数据的解密示例代码.

*

* @copyright Copyright (c) 1998- Tencent Inc.

*/

namespace wechat;

class wxBizDataCrypt

{

private $appid;

private $sessionKey;

/**

* 构造函数

* @param $sessionKey string 用户在小程序登录后获取的会话密钥

* @param $appid string 小程序的appid

*/

public function __construct( $appid, $sessionKey)

{

$this->sessionKey = $sessionKey;

$this->appid = $appid;

}

/**

* 检验数据的真实性,并且获取解密后的明文.

* @param $encryptedData string 加密的用户数据

* @param $iv string 与用户数据一同返回的初始向量

* @param $data string 解密后的原文

*

* @return int 成功0,失败返回对应的错误码

*/

public function decryptData( $encryptedData, $iv, &$data )

{

if (strlen($this->sessionKey) != 24) {

return errorCode::$IllegalAesKey;

}

$aesKey=base64_decode($this->sessionKey);

if (strlen($iv) != 24) {

return errorCode::$IllegalIv;

}

$aesIV=base64_decode($iv);

$aesCipher=base64_decode($encryptedData);

$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

$dataObj=json_decode( $result );

if( $dataObj == NULL )

{

return errorCode::$IllegalBuffer;

}

if( $dataObj->watermark->appid != $this->appid )

{

return errorCode::$IllegalBuffer;

}

$data = $result;

return errorCode::$OK;

}

}

/**

* error code 说明.

*

*

-41001: encodingAesKey 非法

*

-41003: aes 解密失败

*

-41004: 解密后得到的buffer非法

*

-41005: base64加密失败

*

-41016: base64解密失败

*

*/

class errorCode

{

public static $OK = 0;

public static $IllegalAesKey = -41001;

public static $IllegalIv = -41002;

public static $IllegalBuffer = -41003;

public static $DecodeBase64Error = -41004;

}

改造

/**

* 对微信小程序用户加密数据的解密示例代码.

*

* @copyright Copyright (c) 1998- Tencent Inc.

*/

namespace wechat;

class wxBizDataCrypt

{

private $appid;

private $sessionKey;

/**

* error code 说明.

*

*

-41001: encodingAesKey 非法

*

-41003: aes 解密失败

*

-41004: 解密后得到的buffer非法

*

-41005: base64加密失败

*

-41016: base64解密失败

*

*/

public static $OK = 0;

public static $IllegalAesKey = -41001;

public static $IllegalIv = -41002;

public static $IllegalBuffer = -41003;

public static $DecodeBase64Error = -41004;

/**

* 构造函数

* @param $sessionKey string 用户在小程序登录后获取的会话密钥

* @param $appid string 小程序的appid

*/

public function __construct( $appid, $sessionKey)

{

$this->sessionKey = $sessionKey;

$this->appid = $appid;

}

/**

* 检验数据的真实性,并且获取解密后的明文.

* @param $encryptedData string 加密的用户数据

* @param $iv string 与用户数据一同返回的初始向量

* @param $data string 解密后的原文

*

* @return int 成功0,失败返回对应的错误码

*/

public function decryptData( $encryptedData, $iv, &$data )

{

if (strlen($this->sessionKey) != 24) {

return self::$IllegalAesKey;

}

$aesKey=base64_decode($this->sessionKey);

if (strlen($iv) != 24) {

return self::$IllegalIv;

}

$aesIV=base64_decode($iv);

$aesCipher=base64_decode($encryptedData);

$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

$dataObj=json_decode( $result );

if( $dataObj == NULL )

{

return self::$IllegalBuffer;

}

if( $dataObj->watermark->appid != $this->appid )

{

return self::$IllegalBuffer;

}

$data = $result;

return self::$OK;

}

}

/*$appid = 'wx4f4bc4dec97d474b';

$sessionKey = 'tiihtNczf5v6AKRyjwEUhQ==';

$encryptedData="CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM

QmRzooG2xrDcvSnxIMXFufNstNGTyaGS

9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+

3hVbJSRgv+4lGOETKUQz6OYStslQ142d

NCuabNPGBzlooOmB231qMM85d2/fV6Ch

evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6

/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw

u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn

/Hz7saL8xz+W//FRAUid1OksQaQx4CMs

8LOddcQhULW4ucetDf96JcR3g0gfRK4P

C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB

6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns

/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd

lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV

oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG

20f0a04COwfneQAGGwd5oa+T8yO5hzuy

Db/XcxxmK01EpqOyuxINew==";

$iv = 'r7BXXKkLb8qrSNn05n0qiA==';

$pc = new wxBizDataCrypt($appid, $sessionKey);

$errCode = $pc->decryptData($encryptedData, $iv, $data );

if ($errCode == 0) {

print($data . "\n");

} else {

print($errCode . "\n");

}*/

微信小程序获取用户手机号详解

最近在做一款微信小程序,需要获取用户手机号,具体步骤如下: 流程图: 1.首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话 ...

微信小程序获取用户手机号,服务器解码demo

原理:通过微信登陆接口wx.login得到encryptedData . iv .code.经过接口处理code得到sessionkey.最后官方demo得到解密后的手机号.(接口处理这一步也可以在 ...

微信小程序获取用户手机号 记录 (PHP)

1. 用户登录时需要获取 openid ,同时可以获取 session_key, 二者同时返回, 此时我们要将二者存储在服务端. 2. 小程序端 button 按钮拉起授权, 向api 传递 iv 和 ...

[微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息

因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...

微信小程序 获取用户信息并保存登录状态

微信小程序 获取用户信息并保存登录状态:/content/18/0124/11/990_724662071.shtml

Laravel wxxcx 微信小程序获取用户信息

wxxcx 是Laravel5微信小程序登录获取用户信息扩展 部署 12345678 # 安装$ composer require iwanli/wxxcx# 注册服务# 在 /config/app. ...

.Net之微信小程序获取用户UnionID

前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一(便于用户信息的管理).这段时间就有一个这样的需求,之前有个客户做了一个微信小程序 ...

微信小程序获取登录手机号

小程序获取登录用户手机号. 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用组件的点击来触发. 首先,放置一个 button 按钮,将 ...

微信小程序获取用户信息,解密encryptedData 包括敏感数据在内的完整用户信息的加密数据

package com.iups.wx.wxservice; import java.io.UnsupportedEncodingException; import java.security.Alg ...

随机推荐

debian命令行删除postgresql数据库

创建数据库 $ createdb odoo-test 删除数据库 $ dropdb odoo-test

Unity入门知识

参考书: ● scene图中按F键:放大,居中当前选中的物体 ● 坐标轴:红-x轴,绿-y轴,蓝-z轴 ● 逐帧运行程序: ● OnGUI:可以用来画界面 ● ...

React初探

经过几天根据官方文档和博园中一些大牛的文章,在了解过基础的语法和组件后,总结一下: 1.第一件事就是分析界面,理想状态下是让每个组件只做一件事情,也就是单一职责,相互嵌套.我认为: 构建组件树,整体的 ...

Java基础知识强化04:判断101~200之间有多少素数

1. 判断101~200之间有多少素数? package himi.hebao; /** * (1).编写函数isPrime()用来判断输入数据是否为素数 (2).遍历判断101~200之间的数据是否 ...

关于JS脚本语言的基础语法

JS脚本语言的基础语法:输出语法 alert("警告!"); confirm("确定吗?"); prompt("请输入密码");为弱 ...

关于css选择器中有小数点的标签获取

需求说明 因为项目中章节配置的时候有小数点,1,1.1,1.2,1.11的标题,这个时候每一行标题的id,class设置成标题号是独一无二的标记.但是,直接用js获取是获取不到的,例如$('#3.22 ...

Linux下C语言socket通信实现发送读取的文件内容--简单实现代码

本次代码涉及到的内容:socket通讯,文件读取 读取的文件以及文件位置: 要读取的文件和c文件在同一个目录下.客户端(client)读取的是123.xml,服务端(server)读取的是23.xml ...

百度地图JS 搜索悬浮窗功能

这个需求的效果类似下面的截图,主要还是利用百度地图中自定义控件的功能,挺简单的.文档地址在这 /index.php?title=jspopular 效果图 ...

Linux系统编程——水平触发和边沿触发

事件模型 EPOLL事件有两种模型: Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据. Level Triggered (LT) 水平触发只要有数据都会触 ...

springboot系列八、springboot整合kafka

背景: 当业务在同一时间出现高并发的时候,这个时候我们不想无限的增加服务器,但是又想提高吞吐量.这时可以考虑使用消息异步处理,进行消峰填谷:同时还可以降低耦合度.常见的消息中间件有kafka,rabb ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。