Graent.Hu 的博客

新浪微薄腾讯微薄

最新碎语:最近感觉有些迷茫,怎么办~

您的位置:Graent.Hu 的博客 >微信> 二、又一篇thinkphp5+easywechat支付的文字:微信公众号内支付

二、又一篇thinkphp5+easywechat支付的文字:微信公众号内支付

查看服务详细    前几天写了一下使用tp5和easywechat集成微信扫码支付的方法(可以点这里查看),里面已经说过咱们安装easywechat了,这里就不在重复说明了,直接写集成的步骤了:

    1,相关的配置请参考之前的第一篇文字

    2,页面样子如下:

QQ截图20171125204422.png

页面代码就不贴了,就只是写了下按钮的代码如下:


<a href="{:url('mobile/recharge/pay',['amount'=>1])}" type="button" style="width: 98%;height: 40px;background: #2ba245;border: 0;color: #fff;font-size: 16px;">使用微信支付</a>

这里为了演示,直接使用a链接跳转,amount就是需要支付的金额,这里的逻辑可以根据自己的情况处理,直接的传递金额还是不要的好,跳转到pay之后,向微信请求生成预支付订单,并获取调取微信支付的相关内容:

Recharge.php中function pay的代码如下:


namespace app\payment\controller;
use EasyWeChat\Foundation\Application;
use EasyWeChat\Payment\Order;
class Wxpay extends Prepay
{
    public function pay(){
        $money = input('money',0);
        //创建支付订单
        $params = $this->create_order($money);
        if($params !== false) {
            $options = [
                // 前面的appid什么的也得保留哦
                'app_id' => 'xxxx',
                // ...
                // payment
                'payment' => [
                    'merchant_id' => 'your-mch-id',
                    'key' => 'key-for-signature',
                    'cert_path' => getcwd() . "\\Cert\\wechat\\apiclient_cert.pem", // XXX: 绝对路径!!!!
                    'key_path' => getcwd() . "\\Cert\\wechat\\apiclient_key.pem",      // XXX: 绝对路径!!!!
                    'notify_url' => 'http://www.xxx.com/wxnotify/notify.html',       // 你也可以在下单时单独设置来想覆盖它
                ],
            ];

            $wxApp = new Application($options);
            $payment = $wxApp->payment;
            $attributes = [
                'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP...
                'body' => '元宝充值-' . $money . "-" . $params['uid'],
                'detail' => $params['out_trade_no'],
                'out_trade_no' => $params['out_trade_no'],
                'total_fee' => $money * 100, // 单位:分
//            'notify_url'       => 'http://xxx.com/order-notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
                'openid' => $this->uinfo['openid'], // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识,
                // ...
            ];

            $order = new Order($attributes);
            $result = $payment->prepare($order);
            if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS') {
                $prepayId = $result->prepay_id;
                $json = $payment->configForPayment($prepayId);
                $this->assign('jsondata',$json);
                return $this->fetch('yb-prepay');
            }else{
                return $this->error('调起支付失败,稍后再试');
            }
        }else{
            return $this->error('充值订单创建失败,稍后再试');
        }
    }
}
对应的前台html代码:



<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>发起支付-支付</title>
    <script type="text/javascript">
        //调用微信JS api 支付
        function jsApiCall()
        {
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest',{$jsondata},
            function(res){
                WeixinJSBridge.log(res.err_msg);
                alert(res.err_code+res.err_desc+res.err_msg);
            }
        );
        }

        function callpay()
        {
            if (typeof WeixinJSBridge == "undefined"){
                if( document.addEventListener ){
                    document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
                }else if (document.attachEvent){
                    document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                    document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
                }
            }else{
                jsApiCall();
            }
        }
        callpay();
    </script>
</head>
<body>
<div align="center">
    正在发起支付,请稍后...
</div>
</body>
</html>
html代码就看你自己发挥了,总之把微信返回的jsondata返回到前端,然后callpay()调起支付就好了,效果如下:


IMG_20171125_210249.png

至于回调,参考之前的第一篇即可,处理方式是一样的(一、thinkphp5使用easywechat集成微信扫码支付),其实用easywechat很简单,构建支付参数之后执行即可,公众号内支付一定要支付参数要包含openid,获取openid的方法很多这里暂时就不讨论了,更多使用可以去看easywechat的手册,希望对于你帮助。


原创文字,转载请注明出处。

我的微信:graent_hu

欢迎扫码加我和微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~

转载请注明出处:

本文标题:二、又一篇thinkphp5+easywechat支付的文字:微信公众号内支付

本文链接:https://www.wlyc.cn/post-123.html

发表评论

路人甲 表情
看不清楚?点图切换