stuchilde/wxxcx

适用于 Laravel 的微信小程序(mini_app)插件

1.0.0 2021-04-26 06:19 UTC

This package is auto-updated.

Last update: 2024-09-26 13:33:16 UTC


README

小程序官方的加解密 SDK 已经非常清晰了,只是改变了 Laravel 风格,就像搬砖工一样。至于重复造轮子,我发现其他人在扩展解密用户信息时代码有误,并且没有提及需要安装 Laravel 的 Curl 扩展。我只能根据他们的源码自己写一个0.0,不依赖其他扩展,直接安装即可。

小程序 API 接口

安装

将服务提供者注册到 Laravel 中,具体位置在 /config/app.php 文件的 providers 数组中

Stuchilde\Wxxcx\WxxcxServiceProvider::class,

发布配置文件

php artisan vendor:publish --tag=wxxcx

命令完成后,会在您的配置文件夹中添加一个 wxxcx.php 配置文件,如:/config/wxxcx.php

生成配置文件后,将小程序的 AppIDAppSecret 填写到 /config/wxxcx.php 文件中

在 Laravel 5 控制器中使用(示例)

...

use Stuchilde\Wxxcx\Wxxcx;

class WxxcxController extends Controller
{
    protected $wxxcx;

    function __construct(Wxxcx $wxxcx)
    {
        $this->wxxcx = $wxxcx;
    }

    /**
     * 小程序登录获取用户信息
     * @author 晚黎
     * @date   2017-05-27T14:37:08+0800
     * @return [type]                   [description]
     */
    public function getWxUserInfo()
    {
        //code 在小程序端使用 wx.login 获取
        $code = request('code', '');
        //encryptedData 和 iv 在小程序端使用 wx.getUserInfo 获取
        $encryptedData = request('encryptedData', '');
        $iv = request('iv', '');

        //根据 code 获取用户 session_key 等信息, 返回用户openid 和 session_key
        $userInfo = $this->wxxcx->getLoginInfo($code);

        //获取解密后的用户信息
        return $this->wxxcx->getUserInfo($encryptedData, $iv);
    }
}

用户信息返回格式

{
    "openId": "xxxx",
    "nickName": "晚黎",
    "gender": 1,
    "language": "zh_CN",
    "city": "",
    "province": "Shanghai",
    "country": "CN",
    "avatarUrl": "http://wx.qlogo.cn/mmopen/xxxx",
    "watermark": {
        "timestamp": 1495867603,
        "appid": "your appid"
    }
}

小程序端获取 code、iv、encryptedData 向服务端发送请求示例代码:

//调用登录接口
wx.login({
    success: function (response) {
        var code = response.code
        wx.getUserInfo({
            success: function (resp) {
                wx.request({
                    url: 'your domain',
                    data: {
                        code: code,
                        iv: resp.iv,
                        encryptedData: resp.encryptedData
                    },
                    success: function (res) {
                        console.log(res.data)
                    }
                })
            }
        })
    },
    fail:function(){
        ...
    }
})

如有 bug,请在 Issues 中反馈,非常感谢!