手机版

PHP作为后端对接微信小程序微信登录

时间:2021-12-14 来源:互联网 编辑:宝哥软件园 浏览:

步骤:

1.调用wx.login得到密码

返回的结果示例:

{代码: ' 051 ni 5pa 1 xjkds 0773 pa 1 owyoa 1 ni 5pf ' errmsg : '登录: ok ' } 2 .拿密码换取会话密钥与openid

这里使用服务端来请求,以服务器端编程语言(专业超文本预处理器的缩写)为例

$ code=$ this-input-post(' code ');$ JSON='https://api.weixin.qq.com/sns/jscode2session?appid='。wxpayconfig :3360 appid。secret='。wxpayconfig : appsecret。js _ code=' .$代码grant _ type=authorization _ code ';标题('内容-类型:应用程序/JSON’);echo file _ get _ contents($ JSON);其中appid与appsecret换成自己小程序的

得到的返回结果如下:

{ ' session _ key ' : ' ODM d5e 1 qji5k jh7 otbvzyg=',' expires_in': 7200,' open id ' : ' oqmjq 0bkl 6 mrarbbycf9 roac 3k 0 ' } 4 .生成用户或登录用户

如果该openid不存在于数据库中,认为是新用户,注册它,如果openid已存在于数据库,认为是老用户。

服务器端编程语言(专业超文本预处理器的缩写)代码如下:

?用户模型扩展了CI_Model { //当前用户私人$用户;//注册或更新用户公共函数registOrUpdate($ data){ if($ this-verify($ data)){ $ this-update([' session _ key '=$ data-session _ key],[' uid '=$ this-user-uid]);} else { $ this-regist($ data);} $ response=['第三个会话'=$ this-生成第三个会话()];echo JSON _ encode($ response);} //注册用户私有函数regist($ data){ $ this-db-insert(' user ',$ data);} //更新用户私有函数update($user,$ condition){ $ this-db-update(' user ',$user,$ condition);} //检测用户是否存在私有函数verify($ data){ $ query=$ this-db-get _ where(' user ',[' OpenID '=$ data-OpenID]);$ user=$ query-first _ row();$ this-user=$ user;if($ query-num _ rows()){ 0返回真}返回false}}5。服务端生成自己的第三届会议

//创建随机数私有函数生成3 rdsession(){返回MD5(mt _ rand().$ this-user-OpenID);}在注册更新方法的最末尾加上如下代码调用:

$ response=['第三个会话'=$ this-生成第三个会话()];echo JSON _ encode($ response);经上,第三届会议发送到了小程序客户端,接下来要做的是将它保存到储存;储备中,以便于后续的每次wx.request()调用。

提示:按照官方文档的时序图来看,以上的随机还是真随机,它不是良好示范,对安全严谨的用途,谨慎使用。

PHP作为后端对接微信小程序微信登录(图1)

6.小程序端本地存储服务端传来的第三届会议

//发起网络请求wx。请求({ URL : ' http://localhost :3000/index。PHP/WXLogin/getSession '、data: { code: res.code }、header : { ' content-type ' : ' application/x-www-form-URL encoded ' }、method: 'POST '、success 3360 function(RES){//保存第三阶段到储存;储备中wx。setstorage({ key : ' third dession ',data : RES . data。third dession })},fail :函数(RES){ console。日志(RES);}})

附加福利——换取union_id打通公众号与小程序用户体系

需要用到wx.getUserInfo,https://MP。微信。QQ。com/debug/wxadoc/dev/API/open。html # wxgetuserinfoobject,从小程序端传入$encryptedData,$iv到服务端,需要用到官方提供好的解密sdk,https://MP。微信。QQ。com/debug/wxadoc/dev/demo/AES-sample。拉链,其中包含了服务器端编程语言(专业超文本预处理器的缩写)示例代码,对它简单的复制粘贴如下

//获取unionid私有函数getUnionId($encryptedData,$iv) { require_once __DIR__ .'/./第三方_ AES/WxBizDataCrypt。PHP ';$ appid=' wxcb 935 c2ec 6734 f 08$pc=new WXBizDataCrypt($appid,$ session key);$ errCode=$ PC-decrypteddata($ encryptedData,$iv,$ data);if($ errCode==0){ $ obj=JSON _ decode($ data);var _ dump($ obj-union id);返回[ 'unionid'=$obj-unionId '昵称=$ obj-昵称,' avatarUrl'=$obj-avatarUrl,' gender '=$ obj-gender];} else { print($errCode .\ n ');} }这样就得到了unionid,就可以与自己的同一开发平台的帐号体系下的应用打通了,否则不会返回unionid。

这里有个坑,就是要把需要一次放在getUnionId方法体内,而不是类顶部,因为为干扰标题("内容类型:应用程序/json)的输出,导致小程序端拿到的res.data是线而不是json对象。

最后成功存到了数据库,得到自己关心的信息。

PHP作为后端对接微信小程序微信登录(图2)

注意要先将小程序挂载在开放平台下

PHP作为后端对接微信小程序微信登录(图3)

版权声明:PHP作为后端对接微信小程序微信登录是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。