- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
详解微信⼩程序⽀付流程与梳理
花了⼏天把⼩程序的⽀付模块接⼝写了⼀下,可能有着公众号开发的⼀点经验,没有⼊太多的坑,在此我想记录⼀下整个流程。
⾸先先把⼩程序微信⽀付的图搬过来:
相信会来查百度的同学们基本都是对⽂档的说明不是很理解。我下⾯⼤概总结⼀下整个业务逻辑的过程。
微信⼩程序的商户系统⼀般是以接⼝的形式开发的,⼩程序通过调⽤与后端约定好的接⼝进⾏参数的传递以及数据的接收。在⼩
程序⽀付这块,还需要跟微信服务器进⾏交互。过程⼤致是这样的:
⼀.⼩程序调⽤登录接⼝获取code,传递给商户服务器⽤来获取⽤户的openID
我们知道在微信平台中,同⼀个公众号的openID都是不同的,它是⽤户⾝份识别的id,也就是说,我们通过openID来区分不同的
⽤户,这个有微信开发基础的应该都很熟悉。为了知道谁在⽀付,我们需要先获取当前⽤户的openid,那么openID应该怎么获取
呢?看下图:
1.⼩程序调⽤wx.login()获取临时登录凭证code,并回传到开发者服务器。
2.开发者服务器以code换取⽤户唯⼀标识openid和会话密钥session_key。
看不懂吗?不急,听我慢慢解释,这个业务流程⼤致就是⾸先你得先在⼩程序的代码中调⽤wx.login()来向微信获取到code,拿到
了之后把code通过request传给商户服务器,再由商户服务器通过骚操作来跟微信服务器要session_key和openID。
伪代码如下(⼩程序端):
getToken:function(){
//调⽤登录接⼝
wx.login({
success:function(res){
varcode=res.code;
wx.request({
url:商户服务器接⼝地址,
data:{
code:code
},
method:POST,
success:function(res){
wx.setStorageSync(token,res.data.token);//存在⼩程序缓存中
},
fail:function(res){
console.log(res.data);
}
})
}
})
}
调⽤这⼏⾏代码就可以向跟微信服务器要code,并且将code传到商户服务器中,记住这⾥最好使⽤post发送请求,安全性的东西
我应该不⽤讲了,因为避免其他⼈滥⽤接⼝,于是我们使⽤token来进⾏验证。并将商户服务器返回的token存在⼩程序缓存中。
那么服务器端应该怎么做呢?
我门通过⼩程序提交的code,和⼩程序的APPID以及APPSECRET和拼接下列的url,并⽤curl进⾏get请求。
返回的数据是⼀个json对象,我门通过使⽤json_decode(JSON,true)解析为数组,数据包括⽤户的openID以及session_key,获取
到了后我们应该将openID存⼊数据库中,它代表着⽤户的⾝份,那么令牌应该怎么⽣成呢。
⼆.token的⽣成以及缓存
我们根据⼀个⽤户表将id和openid联系起来,对应openID的id则是⽤户的uid,我们可以这么封装
//要缓存的数据数组
$cacheValue=$result;//包含openID和session_key
$cacheValue[uid]=$uid;//⽤户id
$cacheValue[scope]=ScopeEnum::User;//⽤户权限级别
缓存的⽅式我们可以选择redis,memcache,⽂件缓存等等,采⽤键值对(key-value)的⽅式进⾏存储,记得设置好过期时间。这
⾥的key我们⽤token来赋值,token可以通过这样的⽅式进⾏⽣成:
//获取32位随机字符串
$str=getRandChar(32);//⾃定义⽅法⽣成32位随机串
//三组字符串进⾏md5加密
$timeStamp=$_SERVER[REQUEST_TIME_FLOAT];
//salt
$salt=config(secure.token_salt);//随机字符串
//返回token
returnmd5($str.$timeStamp.$salt);
这种算法基本保障了token的唯⼀性。因为值是我们获取到的openID和session_key所在的数组,所以需要将数组转成jso
文档评论(0)