PHP微信小程序登录

public function login()
{
    // 接收参数
    $data = $_POST;
    $appsecret = preg_replace("/\s/", "", ******);
    $appid = *******;
    $code = $data['code'];
    $iv = str_replace(" ", "+", $data['iv']);
    $signature = $data['signature'];
    $rawData = $data['rawData'];

    // 拼接url
    $url = "https://api.weixin.qq.com/sns/jscode2session?" . "appid=" . $appid . "&secret=" . $appsecret . "&js_code=" . $code . "&grant_type=" . 'authorization_code';

    $res = json_decode($this->httpRequest($url), true);
    if (isset($res['session_key']) == '') {
        return json(['code' => 0, 'msg' => '', 'data' => $res]);
    }
    $sessionKey = $res['session_key'];

    //取出json里对应的值
    $signature2 = sha1($rawData . $sessionKey);

    // 验证签名
    if ($signature2 !== $signature) {
        return json(['code' => 0, 'msg' => '验签失败', 'data' => '']);
    }

    // 获取解密后的数据
    $pc = new WXBizDataCrypt($appid, $sessionKey);
    $errCode = $pc->decryptData($data['encryptedData'], $iv, $data);
    if ($errCode != 0) {
        return json(['code' => 0, 'msg' => $errCode, 'data' => '']);
    }
    $datas = json_decode($data, true);
    $datas['token'] = $this->checkAuth($appid, $appsecret);
    $datas['openid'] = $res['openid'];
    if ($errCode == 0) {
        $users = new User();
        $wallet=new UserWallet();
        $db = $users->where('openid', $datas['openid'])->count();
        if ($db == 0) {
            $users->insert([
                'openid' => $res['openid'],
                'nickname' => $datas['nickName'],
                'head_img' => $datas['avatarUrl'],
                'gender' => $datas['gender'],
            ]);
            $wallet->insert([
                'openid' => $res['openid'],
                'type'=>3,
                'num' => sysconfig('coures', 'give_course_count')
            ]);
        } else {
            $users->where('openid', $datas['openid'])->update(
                [
                    'openid' => $res['openid'],
                    'nickname' => $datas['nickName'],
                    'head_img' => $datas['avatarUrl'],
                    'gender' => $datas['gender']
                ]
            );
        }
        return json(['code' => 1, 'msg' => 'succeed', 'data' => $datas]);
    } else {
        return json(['code' => 0, 'msg' => $errCode, 'data' => '']);

    }
}

//微信接口调用凭证

public function checkAuth($appid, $appsecret)
{
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret;
    $result = $this->httpRequest($url);
    if ($result) {
        $json = json_decode($result, true);
        if (!$json || isset($json['errcode'])) {
            return false;
        }
        return $json['access_token'];
    }
    return false;

}
 
 /**
     * @param $url
     * @param string $data
     * @param string $method
     * @return bool|string
     */
    function httpRequest($url, $data = '', $method = 'GET')
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        if ($method == 'POST') {
            curl_setopt($curl, CURLOPT_POST, 1);
            if ($data != '') {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
        }

        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        curl_close($curl);
        return $result;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值