PHP集成微信支付(APP支付)

摘要:
Yansongda/paycomposerrequiryyansongda/pay vvv微信支付简单使用<ClassPayTool{/*微信APP支付配置参数*/protected$wxConfig=['appid'=>

目录

配置参数

  • 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:

  • 需要能够正确处理第三方重复的支付结果通知。
  • 异步通知除了签名验证,必须校验返回的订单金额是否与商户侧的订单金额一致。
  • 可以查询第三方该订单的支付状态,来返回给前端。
  • 用户支付失败时,重新生成订单的逻辑。(关闭失败订单)
  • 小心谨慎。

免责声明:文章转载自《PHP集成微信支付(APP支付)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇delphi中时间控制无线安全专题01--kali破解WPA下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

1.MyBatis所需要的配置文件

一、Mybatis介绍      MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库...

pymysql 线程安全pymysqlpool

# -*-coding: utf-8-*- # Author : Christopher Lee # License: Apache License # File : test_example.py # Date : 2017-06-18 01-23 # Version: 0.0.1 # Description: simple test...

怎么在vue中引入layui

新项目想用layui框架,学习了把前辈是怎么引入layui的,这里记录下 1.index.html要引入layui.js文件 <script src="/static/layui/layui.js" type="text/javascript" charset="utf-8"></script> 2.main.js文件要配置好lay...

Mac版sublime text右键open in browser 不能识别中文名解决办法

问题描述: Mac下sublime text下打开中文命名的html文件,右键open in browser,浏览器无反应。 解决思路: 要么适应软件,要么改进软件来适应。 1.  将中文名的html文件,改成英文名的html文件来预览。 2.  改造sublime text, 安装插件SideBarEnhancements,使用插件的“open in...

前端通信、跨域

首先了解什么是同源策略: 限制一个源加载的文档或脚本与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。(来自MDN的解释) 源包括三个部分:协议、域名、端口(HTTP协议的默认端口是80)。如果其中有任何一个部分不同,则源不同。即为跨域。 限制:这个源的文档没有权利去操作另一个源的文档。这个限制体现在: Cookie、Llocal...

C#操纵Excel,此工作薄包含嵌入对象,Office 2007的设定方法

C#操纵Excel,插入OLE对象时报“此工作薄包含嵌入对象,EXCEL可能无法从这些对象中删除个人信息。”, 如网上所述,Office 2003可以通过“菜单>>工具>>选项>>安全性中数字签名下有个勾去掉”解决。 Office 2007 呢? 采集 Excel选项→信任中心→个人信息选项,勾选掉“保存时从文件属性...