支付宝小程序获取手机号码的的详细流程。(配置开发设置,具体流程)
支付宝小程序获取手机号码跟微信小程序的不一样,所以获取的流程也有很多的不同,所以第一步并不是直接写代码。流程如下:一、登录支付宝小程序开发管理平台 ->开发中心->小程序应用->选择你的小程序(点击查看)->设置->开发设置上图中的接口加签方式、IP白名单、应用网关、接口内容加密方式都需要设置。二、接口加签方式,点击后需要授权短信验证码验证身份,然后如下图:这里我模拟
支付宝小程序获取手机号码跟微信小程序的不一样,所以获取的流程也有很多的不同,所以第一步并不是直接写代码。
流程如下:
一、登录支付宝小程序开发管理平台 ->开发中心->小程序应用->选择你的小程序(点击查看)->设置->开发设置
上图中的接口加签方式、IP白名单、应用网关、接口内容加密方式都需要设置。
二、接口加签方式,点击后需要授权短信验证码验证身份,然后如下图:
这里我模拟使用官方提供的支付宝密钥生成器生成密钥就行,步骤如下:
1.下载安装密钥生成器:传送门
2.下载后直接傻瓜式安装就行,安装完毕后运行,进行如下设置:
这里我们使用的是默认的配置就行,直接点击生成密钥,等几秒钟密钥生成后,点击上传公钥。
我们的服务器会需要csr文件,直接点击获取csr文件获取,然后点击打开文件位置,将csr文件保存到服务器上面(后端验证签名和解密需要)。
这时我们就得到了密钥了,我们复制应用公钥回到上一步的接口加签方式页面。
三、将公钥粘贴到表单,然后点击保存设置
设置成功如下:
四、接下来我们需要配置IP白名单
点击设置->点击添加规则->选择配置全量接口
点击下一步->添加IP地址:
可添加多个IP地址,使用英文逗号隔开->确认添加->二次确认
配置ip白名单完成,接着进行下一步配置
五、配置应用网关
点击设置:
这里的网关可以使用域名,同样可以添加多个网关,使用英文逗号隔开,点击确定就OK了
六、设置接口内容加密方式
点击设置:
直接点击生成就行了。
全部设置后:
七、完成敏感信息申请
开发管理 -> 功能列表 -> 添加功能 -> 获取会员手机号 -> 用户信息申请
八、小程序获取手机号码
获取支付宝用户绑定的手机号。因为需要用户主动触发才能发起获取手机号,所以该功能不由 API 直接调用,需用 button 组件 的点击来触发。
///axml
<!-- 授权弹窗 -->
<view class="alert-author" a:if="{{alertPhone}}">
<view class="alert-mask"></view>
<view class="alert-content">
<view class="alert-main">
<view class="alert-title">授权信息</view>
<view class="alert-describe">小程序需要您的授权才能获得更好的服务哦。</view>
</view>
<view class="alert-buttons">
<button open-type="getAuthorize" scope='phoneNumber' class="alert-button" hover-class="button-active" onGetAuthorize="getUserPhone">确定</button>
</view>
</view>
</view>
<!-- 授权弹窗 -->
///js
getUserPhone(e){
let that = this;
my.getPhoneNumber({
success: (res) => {
let encryptedData = res.response;
that.setData({
['userInfo.phone']: "18290261572",
alertPhone: false
})
my.request({
url: '你的后端服务端',
data: encryptedData,
success: function(result){
}
});
},
fail: (res) => {
console.log("获取失败",res);
},
});
},
九、java后端解密数据
String response = "小程序前端提交的";
//1. 获取验签和解密所需要的参数
Map<String, String> openapiResult = JSON.parseObject(response,
new TypeReference<Map<String, String>>() {
}, Feature.OrderedField);
String signType = "RSA2";
String charset = "UTF-8";
String encryptType = "AES";
String sign = openapiResult.get("sign");
String content = openapiResult.get("response");
//如果密文的
boolean isDataEncrypted = !content.startsWith("{");
boolean signCheckPass = false;
//2. 验签
String signContent = content;
String signVeriKey = "你的小程序对应的支付宝公钥(为扩展考虑建议用appId+signType做密钥存储隔离)";
String decryptKey = "你的小程序对应的加解密密钥(为扩展考虑建议用appId+encryptType做密钥存储隔离)"
;
//如果是加密的报文则需要在密文的前后添加双引号
if (isDataEncrypted) {
signContent = "\"" + signContent + "\"";
}
try {
signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);
} catch (AlipayApiException e) {
//验签异常, 日志
}
if(!signCheckPass) {
//验签不通过(异常或者报文被篡改),终止流程(不需要做解密)
throw new Exception("验签失败");
}
//3. 解密
String plainData = null;
if (isDataEncrypted) {
try {
AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);
} catch (AlipayApiException e) {
//解密异常, 记录日志
throw new Exception("解密异常");
}
} else {
plainData = content;
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)