当前位置:   article > 正文

微信小程序获取手机号和openid_微信小程序获取用户openid和手机号

微信小程序获取用户openid和手机号

小程序通过wx.login组件会返回一个code,这个code用来获得用户的openid

小程序写法为:

  1. wx.login({
  2. success (res) {
  3. if (res.code) {
  4. //发起网络请求
  5. wx.request({
  6. url: 'https://example.com/onLogin',// 后台给的请求地址
  7. data: {
  8. code: res.code
  9. }
  10. })
  11. } else {
  12. console.log('登录失败!' + res.errMsg)
  13. }
  14. }
  15. })

 后端通过以下代码可以获得openid(参考文档:获取插件用户openpid | 微信开放文档

  1. <?php
  2. public function getopenid(){
  3. $js_code = input('post.js_code');//小程序传来的code值
  4. $appid = '';//自己小程序的appid
  5. $appSecret = '';// 自己小程序的$appSecret
  6. $wxUrl = 'https://api.weixin.qq.com/sns/jscode2sessionappid=%s&secret=%s&js_code=%s&grant_type=authorization_code';
  7. $getUrl = sprintf($wxUrl, $appid, $appSecret, $js_code);
  8. //把appid,appsecret,code拼 接到url里
  9. $result = $this->curl_get($getUrl);//请求拼接好的url
  10. $wxResult = json_decode($result, true);
  11. return wxResult;
  12. }
  13. public function curl_get($url, &$httpCode = 0) {
  14. $ch = curl_init();
  15. curl_setopt($ch, CURLOPT_URL, $url);
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  17. //不做证书校验,部署在linux环境下请改为true
  18. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  19. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
  20. $file_contents = curl_exec($ch);
  21. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  22. curl_close($ch);
  23. return $file_contents;
  24. }

使用手机号快速验证组件,获得的code用来请求地址获得手机号。

这个是手机号快速验证组件

  1. <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
  2. Page({
  3. getPhoneNumber (e) {
  4. console.log(e.detail.code) // 动态令牌
  5. console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)
  6. console.log(e.detail.errno) // 错误码(失败时返回)
  7. }
  8. })

具体返回信息为:

 后端拿到code后获取手机号的代码为(参考文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html):

  1. public function getphone(){
  2. $js_code = input('post.phone_code');//小程序传来的code值
  3. $appid = '';//小程序的appid
  4. $appSecret = '';// 小程序的$appSecret
  5. $access_token = $this->getAccessToken($appid, $appSecret);
  6. if($access_token !== false){
  7. $data = array(
  8. 'code' => $js_code
  9. );
  10. $result=$this->getUserPhoneNumber("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$access_token,$data);
  11. var_dump($result);
  12. }
  13. }
  14. public function getAccessToken($appid,$secret){
  15. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
  16. $ch = curl_init();
  17. curl_setopt($ch, CURLOPT_URL, $url);
  18. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  19. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  20. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  21. $data = curl_exec($ch);
  22. if(curl_errno($ch)){
  23. echo '<br>Curl error: ' . curl_error($ch)."<br>";
  24. return curl_error($ch);
  25. }
  26. curl_close($ch);
  27. $result = json_decode($data,true);
  28. if(isset($result["access_token"])){
  29. return $result["access_token"];
  30. }else{
  31. echo "<br>getAccessToken Failed: ".$result["errcode"].";".$result["errmsg"]."<br>";
  32. return false;
  33. }
  34. }
  35. public function getUserPhoneNumber($remote_server, $data) {
  36. $json_data = json_encode($data);
  37. $ch = curl_init();
  38. curl_setopt($ch, CURLOPT_URL, $remote_server);
  39. curl_setopt($ch, CURLOPT_POST, true);
  40. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
  41. curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
  42. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  43. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  44. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  45. $data = curl_exec($ch);
  46. if(curl_errno($ch)){
  47. echo '<br>Curl error: ' . curl_error($ch)."<br>";
  48. return curl_error($ch);
  49. }
  50. curl_close($ch);
  51. //$result = json_decode($data,true);
  52. //var_dump($result);
  53. return $data;
  54. }

如还有问题,可以留言联系,处理了一晚上的bug就记录到这里啦

参考官方文档:

小程序端需要写的:

手机号快速验证组件 | 微信开放文档

php后台需要写的:

手机号验证 | 微信开放文档

获取接口调用凭据:

获取接口调用凭据 | 微信开放文档

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/757950
推荐阅读
相关标签
  

闽ICP备14008679号