最近一个朋友要去给他做个微信小程序,会涉及到获取用户手机号的场景,这里,我前端用的uniapp,后端则用的.NET6,如果用.NET开发微信公众号或小程序的话,我相信大部分人应该都有听说过盛派微信SDK
引入盛派SDK
这里先引入Senparc.Weixin.AspNet
和Senparc.Weixin.WxOpen
两个包,安装完成后进入appsetting.json
配置小程序的相关信息,
1 2 3 4 5
"SenparcWeixinSetting": { "IsDebug": false, "WxOpenAppId": "小程序appId", "WxOpenAppSecret": "小程序Secret" }
再进入Program.cs
注册盛派微信SDK
的相关配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
builder.Services.AddMemoryCache(); builder.Services.AddSenparcWeixinServices(builder.Configuration); var app = builder.Build(); var senparcWeixinSetting = app.Services.GetService<IOptions<SenparcWeixinSetting>>()!.Value; //启用微信配置(必须) var registerService = app.UseSenparcWeixin(app.Environment, null /* 不为 null 则覆盖 appsettings 中的 SenpacSetting 配置*/, null /* 不为 null 则覆盖 appsettings 中的 SenpacWeixinSetting 配置*/, register => { }, (register, weixinSetting) => { //注册公众号信息(可以执行多次,注册多个小程序) register.RegisterWxOpenAccount(weixinSetting, "小程序"); });
现在,我们可使用盛派微信SDK
提供的API来获取手机号了。新建一个controller
来调用API
1 2 3 4 5 6 7 8 9 10 11 12 13
public class WxOpenController : ControllerBase { public static readonly string WxOpenAppId = Config.SenparcWeixinSetting.WxOpenAppId; public static readonly string WxOpenAppSecret = Config.SenparcWeixinSetting.WxOpenAppSecret; [HttpGet("get-phone/{Code}")] public string GetUserPhone(string Code) { //通过`getPhoneNumber`得到的Code来获取手机号 var result = BusinessApi.GetUserPhoneNumber(WxOpenAppId, Code); return result.phone_info.phoneNumber; } }
uniapp获取code
在2.21.2版本之后,获取手机号不需要提前调用login进行登录,直接通过按钮触发getPhoneNumber
获得的code去换取手机号或者是encryptedData
和IV
去解密, 我们先在界面新增一个按钮
1 2 3 4 5 6
<template> <view class="content"> <u-button size="normal" icon="account-fill" plain type="warning" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" text="获取手机号"></u-button> </view> </template>
然后,编写getPhoneNumber
方法
1 2 3 4 5 6 7 8 9 10 11 12
getPhoneNumber(e) { console.log(e); if (e.detail.errMsg != 'getPhoneNumber:ok') { uni.$u.toast("获取手机号失败"); return; } console.log(e.detail.code); let url = `http://localhost/api/WxOpen/get-phone/${e.detail.code}`; uni.$u.http.get(url).then(result => { console.log(result); }); },
这里的$u.http.get
是uView
里面的工具类,如果没有用到uView
就直接用uniapp
里面的请求方法。
这里,我们是用的code获取手机号的方式。盛派SDK
也提供了encryptedData
和IV
解密的API,使用起来还是非常方便。
文章评论