当微信小程序登录通过AppId(小程序ID)和AppSecret(密钥),以及在wx.login中得到code传给js_code之后于会返回OpenId和sessionkey,这时具备了基础用户唯一标识,涉及服务端数据交互,无法展开详细说明(这里略过)。如果需要进一步获取用户信息需要通过“getPhoneNumber”将“encryptedData”、“iv”、“SessionKey”三个参数传给服务端解密得到微信账号手机参数。“encryptedData”是一串长码里面有斜杠“/”,这时在服务端Api接收“encryptedData”会报错,斜杠“、”会被网络协议识别成路径,而不是字符,此时的执行需要将这些串码发送到服务端程序解密,经过反复测试总结只需要在微信小程序中将斜杠“/”替换其他特殊字符即可,如:星号(*),井号(#)或at符号(@)等,在服务端收到之后再替换成斜杠“/”进行解密处理即可。如下图:

网络上有说加“encodeURIComponent”修饰可以传参,经反复测试在WebApi上接受“encryptedData”,即使用了encodeURIComponent转义url还是无法解析路径,有开发者用“encodeURIComponent”可以在php服务端程序上接收,目前.NET WebApi无法用这种方法解析,我这边采用在微信替换斜杠“/”,在服务端收到之后在替换回来处理字符解密。
除此以外,在WebApi中还需要配置“web.config”的“<httpRuntime>”加入“maxUrlLength”,值设置3000以上。否则报错“异常信息: 此请求的 URL 的长度超过配置的 maxUrlLength 值。”如下图:
