php接入微信JSAPI支付,微信内拉起支付,基于thinkPHP框架 WeChatDeveloper支付类包

文章:php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

文章:php快速接入支付宝即时支付,PC网站支付和手机网站支付,基于thinkPHP框架 WeChatDeveloper支付类包


        在使用前可以先看上面的微信扫码支付和H5支付的文章,本文主要介绍微信JSAPI支付,在微信内拉起支付;

开发注意事项:

1、在开发前请先确认回调的域名是否加入了JS安全域名,IP白名单,微信公众平台和微信支付平台都要加,并且开通了对应的产品;

2、复制以下代码前必须安装WeChatDeveloper类,下面都是基于这个类写的,如果不安装不用在往下看了;

3、在使用下面的类之前需要先获取到用户的code,下文会具体说明;

4、下面代码部分已经用xxx代码,需要替换成自己业务对应的才可以;


在使用JSAPI支付时,openid为必填项,在对非微信端网站使用该支付时,需要先获取到用户的openid;

网页授权流程分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期【我们不需要】

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)【我们也不需要】

首先我们让用户访问下面这个网址获取到用户的code,APPID换成自己的,回调网址就是我们下面这个wxJsApi方法,STATE是非必填的 填不填都可以;

https://open.weixin.qq.com/connect/oauth2/authorize?appid=【APPID】&redirect_uri=【跳转的网址】&response_type=code&scope=snsapi_base&state=【非必填参数】#wechat_redirect

当用户访问了上面这个网址并且会跳转到下面这个wxJsApi方法中,在参数中就会携带用户的code,这个时候我们的getOauthAccessToken就会自动获取用户的信息,里面就包含了openid;具体内容见下文代码:

    /**
     * 微信JSAPI支付
     */
    public function wxJsApi(){
        // 准备配置参数
        $config = [
            'appid'      => 'wx1238598xxxxxxxxe',
            'appsecret'  => '5d6fg5r8g4xxxxxxxxxxxxxx56564hg5',
            'mch_id'     => '160xxxxx24',
            'mch_key'    => 'NAMECeShi202120xxxxxxxxxxxx21816',
        ];
        try {
            // 实例接口
            $openid = new \WeChat\Oauth($config);
            // 获取用户的openid
            $open_id = $openid->getOauthAccessToken();
            // 创建接口实例
            $wechat = new \WeChat\Pay($config);
            // 组装参数,可以参考官方商户文档
            $options = [
                'body'             => '订单名称',
                'out_trade_no'     => time(), //订单号
                'total_fee'        => 1*100, //金额,单位分
                'notify_url'       => 'http://baidu.com/tongzhi', //异步通知地址
                'spbill_create_ip' => $_SERVER["REMOTE_ADDR"],
                'trade_type'       => 'JSAPI',
                'openid'           => $open_id['openid']
            ];
            $result = $wechat->createOrder($options);
            $jsapi = $wechat->createParamsForJsApi($result['prepay_id']);
            // 渲染到前端进行拉起
            $this->assign('jsapi',$jsapi);
            return $this->fetch();
        } catch (\WeChat\Exceptions\InvalidResponseException $e) {
            echo $e->getMessage() . PHP_EOL;
        }
    }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>微信订单支付</title>
</head>
<body>

<script>
    function onBridgeReady(){
        WeixinJSBridge.invoke(
            'getBrandWCPayRequest', {
                "appId":"{$jsapi['appId']}",     //公众号名称,由商户传入
                "timeStamp":"{$jsapi['timeStamp']}",         //时间戳,自1970年以来的秒数
                "nonceStr":"{$jsapi['nonceStr']}", //随机串
                "package":"{$jsapi['package']}",
                "signType":"{$jsapi['signType']}",         //微信签名方式:
                "paySign":"{$jsapi['paySign']}" //微信签名
            },
            function(res){
                if(res.err_msg == "get_brand_wcpay_request:ok" ){
                    // 使用以上方式判断前端返回,微信团队郑重提示:
                    // res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
                    location.href="http://www.baidu.com/ok";
                }
            });
    }

    // 页面加载自动触发
    window.onload=function(){
        if (typeof WeixinJSBridge == "undefined"){
            if( document.addEventListener ){
                document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
            }else if (document.attachEvent){
                document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
                document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
            }
        }else{
            onBridgeReady();
        }
    }
</script>
</body>
</html>

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

形影相吊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值