15年软件开发经验,只做源码定制!

原创设计 定制开发

满足您的个性化需求

当前位置:首页 后端开发 Thinkphp5

微信小程序手机号登录

王少铮| 发布于 2021-10-10 17:24:23| 134阅读| 0点赞| 0评论
举报

使用静默授权拿到code去微信方换取session_key最后解密

php部分

/**
     * 手机号登录
     * @return [type] [description]
     */
    public function getPhone()
    {
	//包含iv,code,encryptedData
        $post = $this->request->param();

        $param['<a href="https://www.qinfenniao.com/nav/%E7%BD%91%E7%AB%99%E5%BC%80%E5%8F%91.html" target="_blank">app</a>id'] = 'wx5b2fc725da6511d7';    //<a href="https://www.qinfenniao.com/nav/%E5%B0%8F%E7%A8%8B%E5%BA%8FAPP.html" target="_blank">小程序</a>id
        $param['secret'] = '683c9840703dbd6df2056fc8ba21c7aa';    //<a href="https://www.qinfenniao.com/nav/%E5%B0%8F%E7%A8%8B%E5%BA%8FAPP.html" target="_blank">小程序</a>密钥
        $param['<a href="https://www.qinfenniao.com/article.html?name=js" target="_blank">js</a>_code'] = define_str_replace($post['code']); //这个code是用getInfo获取的code
        $param['grant_type'] = 'authorization_code';

	//从微信方请求到session_key
        $http_key = httpCurl('https://api.weixin.qq.com/sns/<a href="https://www.qinfenniao.com/article.html?name=js" target="_blank">js</a>code2session', $param, 'GET');
        $session_key = <a href="https://www.qinfenniao.com/article.html?name=js" target="_blank">js</a>on_decode($http_key,true);

	//一般如果$session_key里有session_key的键名的话,基本都是成功了
        if(!empty($session_key['session_key'])) {
            $<a href="https://www.qinfenniao.com/nav/%E7%BD%91%E7%AB%99%E5%BC%80%E5%8F%91.html" target="_blank">app</a>id = $param['<a href="https://www.qinfenniao.com/nav/%E7%BD%91%E7%AB%99%E5%BC%80%E5%8F%91.html" target="_blank">app</a>id'];
            $encryptedData = urldecode($post['encryptedData']);
            $iv = define_str_replace($post['iv']);
	//进行解密,解密失败的话$errCode里是int类型的值,例如-41003,成功的话是一维数组,里面包含解密结果
            $errCode = decryptData($<a href="https://www.qinfenniao.com/nav/%E7%BD%91%E7%AB%99%E5%BC%80%E5%8F%91.html" target="_blank">app</a>id, $session_key['session_key'], $encryptedData, $iv);
        }
        return <a href="https://www.qinfenniao.com/article.html?name=js" target="_blank">js</a>on_success(1,'success',$session_key);
    }


uniapp部分

<template>
	<view class="warp" style="width: 100%;height: 100vh;">
		//一定要使用@getphonenumber获取
		<button open-type="getPhoneNumber" type="primary" style="position:absolute;top:35%;left:5%;width:90%;" @getphonenumber="getphonenumber">
			一键授权登录
		</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				code:'',
				session_key:'',
				phone:'',
				encryptedData:'',
			}
		},
		onLoad() {
			this.getInfo();
		},
		methods: {
			//此函数获取到code
			getInfo(){
				uni.login({
					provider:'weixin',
					success:(res)=>{
						this.code = res.code;
					}
				})
			},
			getphonenumber:function(e){
				console.log(e);
				如果成功的话,errMsg会是ok,然后会有两个参数,encryptedData和iv,这两个是请求手机号必须的
				if(e.detail.errMsg == 'getPhoneNumber:ok'){
					//重要,重要,重要
					//一定要用encodeURIComponent进行编码一下,不然会报-41003错误
					this.encryptedData = encodeURIComponent(e.detail.encryptedData);
					uni.request({
						url:'http://beiyong1.qinfenniao.com/api/Index/getphone',
						method:'POST',
						data:{
							code:this.code,
							encryptedData:this.encryptedData,
							iv:e.detail.iv,
						},
						success:(res)=>{
							console.log('获取结果',res);
						}
					})
				}else{
					<a href="https://www.qinfenniao.com/article.html?name=uni" target="_blank">uni</a>.showToast({
						title:'获取失败',
						icon:'none',
						duration:1500,
					})
				}
			}
		}
	}
</script>

<style>
	.warp {
		position: relative;
		height: 100vh;
	}

	.btn {
		width: 400rpx;
		height: 100rpx;
		text-align: center;
		line-height: 100rpx;
		border-radius: 12rpx;
		background-color: #4CD964;
		color: #fff;
		font-size: 39rpx;
		font-weight: bold;
		margin: auto;
		position: absolute;
		top: 0%;
		bottom: 0px;
		left: 0px;
		right: 0px;
	}

	.wenzi {
		text-align: center;
		position: relative;
		top: 450rpx;
		color: grey;
	}
</style>




0

0条评论

别默默看啦~登录/注册一起参与讨论吧~

热门标签

王少铮
微信扫一扫立即咨询
账号登录|扫码登录

立即注册 |忘记密码?

欢迎注册

已有账号马上登录

重置密码

扫码绑定微信
微信扫一扫

绑定手机号

分享到-微信

举报

  • 举报类型:

  • 举报描述:

您好,当前积分不足。

在线客服
拨打电话
17330196230 13230981129
顶部