zoukankan      html  css  js  c++  java
  • PHP集成微信支付(APP支付)

    配置参数

    • appid

    appid 是微信公众账号或开放平台 APP 的唯一标识,在公众平台申请公众账号或者在开放平台申请APP账号后,微信会自动分配对应的 appid,用于标识该应用。可在微信公众平台-->开发者中心查看,商户的微信支付审核通过邮件中也会包含该字段值(APPID)。

    • mch_id

    商户申请微信支付后,由微信支付分配的商户收款账号,邮件中的参数为微信支付商户号。

    • key

    交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播。商户妥善保管该 Key,切勿在网络中传输,不能在其他客户端中存储,保证 key 不会被泄漏。商户可根据邮件提示登录微信商户平台进行设置。也可按一下路径设置:微信商户平台(pay.weixin.qq.com)-->账户设置--> API 安全-->密钥设置。邮件中参数 API 密钥。

    • secret

    AppSecret 是 APPID 对应的接口密码,用于获取接口调用凭证 access_token 时使用。邮件中参数 Appsecret

    安装 PHP 扩展

    这里推荐一个很好用的支付扩展包,它集成了支付宝支付和微信支付。
    yansongda/pay

    composer require yansongda/pay -vvv
    

    微信支付简单使用

    <?php
    namespace XXXApi;
    
    use YansongdaPayPay;
    
    class PayTool
    {
        /* 微信 APP 支付配置参数*/
        protected $wxConfig = [
            'appid' => 'wx18xxxxxxxxxxxxx',
            'mch_id' => '151xxxxxxxxx',
            'key' => '267xxxxx7b89xxxxxxxxxxxxxx',
            'notify_url' => 'http://xxx.xxx.xxx/xxx/PayTool.wxVerify'
        ];
    
        protected function wxPay()
        {
            return Pay::wechat($this->wxConfig);
        }
        
        /* 生成带签名的客户端订单信息*/
        public function getSign($type = 'wx')
        {
            try {
                /* 订单号*/
                $out_trade_no = 'wx'.date('YmdHis');
    
                switch ($type) {
                    case 'wx':
                        $order = [
                            'out_trade_no' => $out_trade_no,
                            /* 金额,单位:分*/
                            'total_fee' => '1',
                            /* 商品描述*/
                            'body' => 'APP名-商品描述',
                        ];
    
                        $wxPay = self::wxPay();
    
                        $pay = $wxPay->app($order);
                        break;
                    default:
                        throw new Exception('支付方式异常');
                }
    
                return [
                    'status' => 200,
                    'result' => json_decode($pay->getContent(), true)
                ];
            } catch (Exception $e) {
                return ['status' => 500, 'result' => $e->getMessage()];
            }
        }
    
        /* 微信支付结果异步通知*/
        public function wxVerify()
        {
            try {
                $wxPay = self::wxPay();
                $result = $wxPay->verify();
    
                if ($result) {
                    $response = $wxPay->success();
                    
                    /* 日志记录*/
                    $wxPayLogs = new WXPayLogs();
                    $wxPayLogs->content = $response->getContent();
    
                    /* all 字段中包括了详细的返回信息*/
                    $wxPayLogs->all = $result->toArray();
                    $wxPayLogs->save();
    
                    /* 返回成功参数给微信*/
                    return $response->send();
                }
            } catch (Exception $e) {
                $wxPayLogs = new WXPayLogs();
                $wxPayLogs->content = $e->getMessage() ;
                $wxPayLogs->save();
            }
        }
    }
    

    后续

    建议查看 yansongda/pay 的文档, 并结合自己的业务需求进行整合。

    Note:

    • 需要能够正确处理第三方重复的支付结果通知。
    • 异步通知除了签名验证,必须校验返回的订单金额是否与商户侧的订单金额一致。
    • 可以查询第三方该订单的支付状态,来返回给前端。
    • 用户支付失败时,重新生成订单的逻辑。(关闭失败订单)
    • 小心谨慎。
  • 相关阅读:
    CF1391D 【505】
    CF1389C 【Good String】
    CF1364C 【Ehab and Prefix MEXs】
    CF1353E 【K-periodic Garland】
    CF1349A 【Orac and LCM】
    CF1352C 【K-th Not Divisible by n】
    CF413D 【2048】
    CF257B 【Playing Cubes】
    CF267A 【Subtractions】
    2018.8.16提高B组模拟考试
  • 原文地址:https://www.cnblogs.com/my3306/p/9818006.html
Copyright © 2011-2022 走看看