账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
H5 支付

H5 端支付流程介绍

1、用户在商户侧完成下单,使用微信支付进行支付

2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB

3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页

4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)

5、如支付成功,商户后台会接收到微信侧的异步通知

6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)

7、商户在展示页面,引导用户主动发起支付结果的查询

8,9、商户后台判断是否接收到微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态(查单实现可参考:支付回调和查单实现指引)

10、展示最终的订单支付结果给用户
官方手册 : 
https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

配置设置

<?php
// 微信开发配置
return array(
    /* -------- 微信支付 [ H5 支付 ] 需要的配置 -------- */
    'MWEB'     => array(
        // 与微信支付绑定的公众号 app id
        'appid'   => 'wx***',
        // 微信支付商户ID
        'mchid'   => '15***',
        // 微信支付对应的KEY
        'key'     => '******'
    )

示例源码

<?php
class wxPayController extends grace{

    public function index(){
        /*
         * 微信支付后端示例代码
         * 模拟一个1元的支付信息,真实环境可以利用订单数据来产生下面的order数据
         */
        //模拟一个简单的订单信息
        $order = array(
            'id'         => mt_rand(111111111,999999999),     // 订单号码
            'price'      => 2           // 订单价格
        );
        //使用统一下单接口返回微信支付前端必须的信息
        $orderWxPay                  = array();
        $orderWxPay['body']         = '支付描述'; //支付描述
        //商户系统内部订单号,要求32个字符内
        $orderWxPay['out_trade_no'] = 'MWEB-'.$order['id'];
        //总价,需要 * 100
        $orderWxPay['total_fee']    = $order['price'];
        //异步接收微信支付结果通知的回调地址
        $orderWxPay['notify_url']   = 'https://域名/wxPay/payback/';
        //实例化微信支付对象
        $graceWeChat    = new \phpGrace\tools\graceWeChat();
        $graceWeChatPay = new \phpGrace\tools\graceWeChat\pay($graceWeChat);
        //生成订单
        $res = $graceWeChatPay->createOrder($orderWxPay, 'MWEB');
        //p($res);
        // 失败 Array ( [return_code] => FAIL [return_msg] => appid不存在 )
        // 成功 Array ( [return_code] => SUCCESS [return_msg] => OK ...  [mweb_url] => weixin://wxpay/bizpayurl?pr=zgYRjTjzz )
        if(!empty($res['mweb_url'])){
            header('location:'.$res['mweb_url']);
            exit();
        }
        // 参考手册
        // https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4
    }

    // 支付成功后微信支付服务器异步通知接口
    // 根据通知结果处理订单状态等后续工作
    public function payback(){
        $graceWeChat    = new \phpGrace\tools\graceWeChat();
        $graceWeChatPay = new \phpGrace\tools\graceWeChat\pay($graceWeChat);
        $res = $graceWeChatPay->payBack('MWEB');
        // 将 res 数组与数据库内订单信息进行比对,比对后进行后续操作,如:更新订单、发送通知......
        file_put_contents('pay.txt', json_encode($res, JSON_UNESCAPED_UNICODE));
        echo '<xml> 
        <return_code><![CDATA[SUCCESS]]></return_code>
        <return_msg><![CDATA[OK]]></return_msg>
      </xml>';
    }
}