一个php实现的微信支付工具集

文档结构

  • │ LICENSE : 许可证
  • │ README.md : 说明文档英文版
  • │ 使用说明.md : 说明文档
  • ├─cert : 存放证书和秘钥的目录,该文件夹需要自行创建。
  • ├─config : 存放配置文件的目录,该文件夹需要自行创建。
  • └─lib : 提供服务的项目文件所在目录
    • CommonFunctions.php : 提供了常用的函数
    • WxPayApi.php : 提供了用于支付请求的相关方法
    • WxPayNotify.php : 提供了用于支付结果回调的相关方法

使用说明

  • cert用于存放证书和秘钥,如果需要为多个项目提供支付支撑的时候,建议在cert创建多个文件放置不同项目的证书和秘钥。
  • config用于存放配置文件,建议使用json文件,可以在一个配置文件中存放不同项目的配置信息,也可以为不同的项目创建不同的配置文件。

使用示例

假设现在有一个名为test的项目需要提供微信支付的支持。

  • cert中创建文件夹test并将证书和秘钥放进去。
  • config中创建文件test.json,内容类似于:
{
    "appId" : "******", // 绑定支付的APPID
    "mchId" : "******", // 商户号
    "key" : "******", // 商户支付密钥
    "appSecret" : "******", // 公众帐号secert
    "sslcertPath" : "../cert/test/apiclient_cert.pem", // 证书pem格式
    "sslkeyPath" : "../cert/test/apiclient_key.pem", // 证书密钥pem格式
    "curlProxyHost" : "0.0.0.0", // 代理地址
    "curlProxyPort" : 0, // 代理端口
    "reportLevel" : 1 // 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报
}
  • 以调用统一下单接口为例,可能代码为:
require_once(PATHTOWXPAY.DS.'stone-wxpay'.DS.'lib'.DS.'WxPayApi.php');
require_once(PATHTOWXPAY.DS.'stone-wxpay'.DS.'lib'.DS.'CommonFunctions.php');
$testWxpayConfig = json_decode(file_get_contents(PATHTOWXPAY.DS.'stone-wxpay'.DS.'config'.DS.'test.json'), true);
// 统一下单
$attachData = json_encode(['orderId' => 1]);
$nonceStr = get_random_string(32);
$order = WxPayApi::unified_order([
    'body' => '测试订单', // 商品描述
    'attach' => $attachData, // 附加数据
    'out_trade_no' => '0320170301122543576135', // 商户订单号
    'total_fee' => 1, // 订单总金额,单位为分
    'time_start' => date('YmdHis'), // 交易起始时间
    'time_expire' => date('YmdHis', time() + 600), // 交易结束时间
    'notify_url' => 'https://http-host-or-ip/controller/action',
    'trade_type' => 'APP', // 交易类型
    'appid' => $testWxpayConfig['appId'], // 公众账号ID
    'mch_id' => $testWxpayConfig['mchId'], // 商户号
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 终端IP
    'nonce_str' => $nonceStr, // 随机字符串
], [
    'appId' => $testWxpayConfig['appId'],
    'mchId' => $testWxpayConfig['mchId'],
    'key' => $testWxpayConfig['key'],
    'sslcertPath' => $testWxpayConfig['sslcertPath'],
    'sslkeyPath' => $testWxpayConfig['sslkeyPath'],
    'curlProxyHost' => $testWxpayConfig['curlProxyHost'],
    'curlProxyPort' => $testWxpayConfig['curlProxyPort'],
    'reportLevel' => $testWxpayConfig['reportLevel'],
    'nonceStr' => $nonceStr,
]);
  • 将得到的数据再进行后续处理即可,这里以为APP提供参数为例,可能的代码如下:
if ($order['result_code'] == 'SUCCESS' && $order['return_code'] == 'SUCCESS') {

    $pay_info = [
        'appid' => $order['appid'],
        'partnerid' => $order['mch_id'],
        'prepayid' => $order['prepay_id'],
        'package' => 'Sign=WXPay',
        'noncestr' => $nonceStr,
        'timestamp' => time(),
    ];

    $pay_info['sign'] = generate_wxpay_sign($pay_info, $testWxpayConfig['key']);

    return ['status' => 200, 'error' => '000', 'message' => '获取app微信支付参数成功', 'data' => $pay_info];
} else {
    return ['status' => 400, 'error' => '000', 'message' => '获取app微信支付参数失败', 'data' => $order];
}

项目托管地址

https://github.com/betterzfz/stone-wxpay

本文首发于公众号:programmer_cc,转载请注明出处。


一个php实现的微信支付工具集_第1张图片
微信公众号.jpg

你可能感兴趣的:(一个php实现的微信支付工具集)