php-tp5-fastadmin开发H5页面,以微信公众号授权,进行JSAPI支付流程

技术要点(具体开发代码,在(公正年报H5)中实现

1、申请好公众号,获取AppID(公众号ID)AppSecret(公众号密钥)

 2、申请微信支付账户,获取(商户号)和(密钥)

 3、在微信支付账户中绑定公众号,然后在公众号中同意授权绑定,使两者产生关联

代码实现

一、h5页面,调用方法获取code

public function getGzhCode()
{
    $appid = 'xxx';//公众号appid
    $redirect_uri = urlencode('https://abcd/me'); // 用户同意授权后,能够跳转的回调链接地址
    // 获取code
    $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
    header('Location: ' . $url);
    exit();
}

二、在上面设置的回调页面me中(通过code获取access_token和openId),这个openId就是用户在公众号中的身份ID,支付的时候通过这个ID来实现

if (isset($_GET['code'])) {
    $appid = 'xxx';//公众号appid
    $appsecret = 'xxx';//公众号secret
    $code = $_GET['code'];//获取回调传过来的code,通过code再获取token以及openId
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    $data = json_decode($result, true);
    $openId = $data['openid']; // 用户的openid
    Session::set('openId',$openId);//保存openid到session中
    //判断用户是否已存在,不存在则先保存新用户记录    
    $userData = GznbUserModel::where('openId',$openId)->find();
    if(empty($userData)){
        $save['openId'] = $openId;
        GznbUserModel::create($save);
        $userData = GznbUserModel::where('openId',$openId)->find();
    }
    $this->assign('userData',$userData);
    return $this->view->fetch();
}

至此,已经完成了获取用户openId和保存记录,用户下次登录或支付时,通过这个openId来锁定身份

三、微信公众号-JSAPI支付实现

1、生成微信公众号-JSAPI支付参数,传递给H5页面做为config

public function form()
{
    if(request()->isPost()){
        //支付页面,提交订单,保存订单记录
        $openId = Session::get('openId');
        $status = 0;
        $trade_no = '';
        if($openId){
          $data = $this->request->param();
            $userData = GznbUserModel::where('openId',$openId)->find();
            if($userData){
                $data['userId'] = $userData['id'];
                $data['orderNumber'] = $this->getOrderNumber();
                //生成随机订单号,和回调时对应
                $data['trade_no'] = $data['orderNumber'];
                $res = GznbOrderModel::create($data);
                if($res){
                    $trade_no = $dat
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值