Rumah > pembangunan bahagian belakang > tutorial php > Thinkphp5微信小程序如何获取用户信息接口

Thinkphp5微信小程序如何获取用户信息接口

小云云
Lepaskan: 2023-03-19 19:30:01
asal
2445 orang telah melayarinya

本文主要介绍Thinkphp5微信小程序获取用户信息接口的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下,希望能帮助到大家。

Thinkphp5微信小程序获取用户信息接口的实例详解

首先在官网下载示例代码, 选php的,

这里有个坑

官方的php文件,编码是UTF-8+的, 所以要把文件改为UTF-8

然后在Thinkphp5 extend文件夹下建立Wxxcx命名空间,把官方的几个类文件放进去(这里要注意文件夹名, 命名空间名, 类名的, 大小写,一定要一样,官方的文件名和类名大小写不一样)

然后是自己的thinkphp接口代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

<?php

/**

 * Created by PhpStorm.

 * User: leeoo

 * Date: 2017/9/14 0014

 * Time: 10:43

 */

  

namespace app\api\controller\v1;

  

  

use think\Loader;

use think\Request;

use Workerman\Protocols\Http;

use Wxxcx\WXBizDataCrypt;

use first\second\Foo;

  

class Index

{

  public function index($id)

  {

  

    return json([&#39;msg&#39; => $id]);

  }

  

  public function dologin()

  {

    $code = Request::instance()->param(&#39;code&#39;);

    $encryptedData = Request::instance()->param(&#39;encryptedData&#39;);

    $iv = Request::instance()->param(&#39;iv&#39;);

  

    $appid = "你的小程序appid";

    $secret = "你的小程序secret";

    //appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code

    $param = array(

      &#39;appid&#39; => $appid,

      &#39;secret&#39; => $secret,

      &#39;js_code&#39; => $code,

      &#39;grant_type&#39; => &#39;authorization_code&#39;

    );

  //http函数为封装的请求函数

    $res = http("https://api.weixin.qq.com/sns/jscode2session", $param, &#39;post&#39;);

  

    $arr = json_decode($res, true);

  

    $result = $this->wxdecode($encryptedData, $iv, $arr[&#39;session_key&#39;], $appid);

  

    //return json($result);

    if ($result) {

      return json([&#39;code&#39; => 1]);

    } else {

      return json([&#39;code&#39; => -1]);

    }

  

  }

  

  public function wxdecode($encryptedData, $iv, $sessionKey, $appid)

  {

    //Loader::import(&#39;Wxxcx\WXBizDataCrypt&#39;, EXTEND_PATH);

    $pc = new WXBizDataCrypt($appid, $sessionKey);

    $data = null;

    $errCode = $pc->decryptData($encryptedData, $iv, $data);

    //echo $data;

    //return json([&#39;data&#39;=>$data]);

    $data = json_decode($data);

  

    if ($errCode == 0) {

      //print($data . "\n");

      //dump($data);

      return $data;

    } else {

      //print($errCode . "\n");

      //dump($errCode);

      return $errCode;

    }

  

  }

}

Salin selepas log masuk

http封装函数:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

/**

 * 发送HTTP请求方法

 * @param string $url  请求URL

 * @param array $params 请求参数

 * @param string $method 请求方法GET/POST

 * @return array $data  响应数据

 */

function http($url, $params, $method = &#39;GET&#39;, $header = array(), $multi = false){

  $opts = array(

    CURLOPT_TIMEOUT    => 30,

    CURLOPT_RETURNTRANSFER => 1,

    CURLOPT_SSL_VERIFYPEER => false,

    CURLOPT_SSL_VERIFYHOST => false,

    CURLOPT_HTTPHEADER   => $header

  );

  /* 根据请求类型设置特定参数 */

  switch(strtoupper($method)){

    case &#39;GET&#39;:

      $opts[CURLOPT_URL] = $url . &#39;?&#39; . http_build_query($params);

      break;

    case &#39;POST&#39;:

      //判断是否传输文件

      $params = $multi ? $params : http_build_query($params);

      $opts[CURLOPT_URL] = $url;

      $opts[CURLOPT_POST] = 1;

      $opts[CURLOPT_POSTFIELDS] = $params;

      break;

    default:

      throw new Exception(&#39;不支持的请求方式!&#39;);

  }

  /* 初始化并执行curl请求 */

  $ch = curl_init();

  curl_setopt_array($ch, $opts);

  $data = curl_exec($ch);

  $error = curl_error($ch);

  curl_close($ch);

  if($error) throw new Exception(&#39;请求发生错误:&#39; . $error);

  return $data;

}

Salin selepas log masuk

然后是小程序的代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

// 获取用户信息

  wx.getSetting({

   success: res => {

    if (res.authSetting[&#39;scope.userInfo&#39;]) {

     // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

     wx.getUserInfo({

      success: res => {

       console.log(res);

       var encryptedData = res.encryptedData

       var iv = res.iv

       wx.request({

        url: "https://你的服务器地址/dologin",//dologin是访问后端的方法

        method: "post",

        data: {

         code: code,

         encryptedData: encryptedData,

         iv: iv

        },

        success: function (ret) {

         console.log(ret);

        }

       })

         

         

       // 可以将 res 发送给后台解码出 unionId

       this.globalData.userInfo = res.userInfo

  

       // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

       // 所以此处加入 callback 以防止这种情况

       if (this.userInfoReadyCallback) {

        this.userInfoReadyCallback(res)

       }

      }

     })

    }

   }

  })

 },

Salin selepas log masuk

如果有报错, 自己调试一下, 看看哪里的变量有问题  查找原因.

相关推荐:

微信授权登录并获取用户信息接口

php微信用户信息接口

信息接口

Atas ialah kandungan terperinci Thinkphp5微信小程序如何获取用户信息接口. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan