微信支付
微信支付目前支持 6 种支付方法,对应的支付 method 如下:
method | 说明 | 参数 | 返回值 |
---|---|---|---|
js | 公众号(JSAPI)支付 | array $order | Collection |
app | APP支付 | array $order | Collection |
h5 | 手机网站(H5)支付 | array $order | Collection |
scan | 扫码(Navicat)支付 | array $order | Collection |
xcx | 小程序支付 | array $order | Collection |
transfer | 商家转账到零钱(v3) | array $order | Collection |
支持 2 种连接模式(直连模式和服务商),根据配置的填写自行进行判断:
# 微信支付配置
$wechatConfig = [
'xcxid' => '', // 小程序 appid
'appid' => '', // 微信支付 appid
'mchid' => '', // 微信支付 mch_id 商户收款账号
'key' => '', // 微信支付 apiV3key(尽量包含大小写字母,否则验签不通过,服务商模式使用服务商key)
'appsecret' => '', // 公众帐号 secert (公众号支付获取 code 和 openid 使用)
'sp_appid' => '', // 服务商应用 ID
'sp_mchid' => '', // 服务商户号
'notify_url' => '', // 接收支付状态的连接 改成自己的回调地址
'redirect_url' => '', // 公众号支付,调起支付页面
// 服务商模式下,使用服务商证书
'serial_no' => '', // 商户API证书序列号(可不传,默认根据证书直接获取)
'cert_client' => './cert/apiclient_cert.pem', // 证书(退款,红包时使用)
'cert_key' => './cert/apiclient_key.pem', // 商户API证书私钥(Api安全中下载)
'public_key_id' => '', // 平台证书序列号或支付公钥ID
// (支付公钥ID请带:PUB_KEY_ID_ 前缀,默认根据证书直接获取,不带前缀)
'public_key' => './cert/public_key.pem', // 平台证书或支付公钥(Api安全中下载)
// (微信支付新申请的,已不支持平台证书,老版调用证书列表,自动生成平台证书,注意目录权限)
];
提示
注意配置信息相关备注
除必传参数外,其他可选参数如下
method | 参数名 | 类型 | 描述 |
---|---|---|---|
time_expire | 交易结束时间 | string[1,64] | 订单失效时间,传入类型(订单失效剩余秒数 2022-02-22 14:22:22 2022年02月22日 14:22:22 有效时间戳) |
attach | 附加数据 | string[1,45] | 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段。 |
settle_info | 结算信息 | boolean | 是否指定分账,枚举值 true:是 false:否 示例值:true |
payer | IP地址 | string[1,45] | 用户的客户端IP,支持IPv4和IPv6两种格式的IP地址。 |
公众号支付
请求示例
$pay = new \fengkui\Pay\Wechat($wechatConfig);
$order = [
'body' => 'subject-测试', // 商品描述
'order_sn' => time(), // 商户订单号
'total_amount' => 1, // 订单金额
'code' => 'codexxxxxxxx', // 用户登录凭证(code或openid两者必传其一)
'openid' => 'openidxxxxxxxx', // 用户唯一标识
];
$result = $pay->js($order);
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数
// 如appId,timeStamp,nonceStr,package,signType,paySign等;
订单配置参数
所有订单配置中,客观参数及配置,扩展包已自动处理, 除必传参数外,可选参数 attach
,time_expire
,如需传入其他参数,可根据自己需求任意修改扩展
所有订单配置参数和官方无异,参数请参考这里,查看「请求参数」一栏。
返回示例
直接跳转链接,无返回参数
手机网站支付
请求示例
$pay = new \fengkui\Pay\Wechat($wechatConfig);
$order = [
'body' => 'subject-测试', // 商品描述
'order_sn' => time(), // 商户订单号
'total_amount' => 1, // 订单金额
'type' => 'wap', // 场景类型 ios, android, wap(默认)
];
$h5_url = $pay->h5($order);
// 返回 Collection 实例为 h5_url 手机网站支付地址
// $pay->h5($order, true); 开启调试,获取支付返回完整数据
订单配置参数
所有订单配置中,客观参数及配置,扩展包已自动处理, 除必传参数外,可选参数 attach
,time_expire
,如需传入其他参数,可根据自己需求任意修改扩展
所有订单配置参数和官方无异,参数请参考这里,查看「请求参数」一栏。
返回示例
返回链接地址,让用户主动点击跳转
调用支付
手机网站支付的调用,请参考官方文档
APP 支付
请求示例
$pay = new \fengkui\Pay\Wechat($wechatConfig);
$order = [
'body' => 'subject-测试', // 商品描述
'order_sn' => time(), // 商户订单号
'total_amount' => 1, // 订单金额
];
$result = $pay->js($order);
// 将返回 Collection 实例,供后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
订单配置参数
所有订单配置中,客观参数及配置,扩展包已自动处理, 除必传参数外,可选参数 attach
,time_expire
,如需传入其他参数,可根据自己需求任意修改扩展
所有订单配置参数和官方无异,参数请参考这里,查看「请求参数」一栏。
返回示例
{
'appId': '', // 微信开放平台审核通过的移动应用appid
'timeStamp': '',
'nonceStr': '', // 随机32位字符串
'prepayid': 'wx261153585405162d4d02642eabe7000000', // 预支付交易会话标识
'paySign': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 秘钥
'partnerid': 'mchid', // 商户号
'package': 'Sign=WXPay',
}
调用支付
APP支付的调用,请参考官方文档
扫码支付
请求示例
$pay = new \fengkui\Pay\Wechat($wechatConfig);
$order = [
'body' => 'subject-测试', // 商品描述
'order_sn' => time(), // 商户订单号
'total_amount' => 1, // 订单金额
];
$code_url = $pay->scan($order);
// 返回 Collection 实例为 code_url 扫码支付地址
// $pay->scan($order, true); 开启调试,获取支付返回完整数据
订单配置参数
所有订单配置中,客观参数及配置,扩展包已自动处理, 除必传参数外,可选参数 attach
,time_expire
,如需传入其他参数,可根据自己需求任意修改扩展
所有订单配置参数和官方无异,参数请参考这里,查看「请求参数」一栏。
返回示例
返回链接地址,使用相关扩展生成二维码,扫码跳转
调用支付
扫码支付的调用,请参考官方文档
小程序
请求示例
$pay = new \fengkui\Pay\Wechat($wechatConfig);
$order = [
'body' => 'subject-测试', // 商品描述
'order_sn' => time(), // 商户订单号
'total_amount' => 1, // 订单金额
'openid' => 'openidxxxxxxxx', // 用户唯一标识
];
$result = $pay->xcx($order);
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数
// 如 appId,timeStamp,nonceStr,package,signType,paySign 等
订单配置参数
所有订单配置中,客观参数及配置,扩展包已自动处理,
除必传参数外,可选参数 attach
,time_expire
,如需传入其他参数,可根据自己需求任意修改扩展
所有订单配置参数和官方无异,参数请参考这里,查看「请求参数」一栏。
返回示例
{
'appId': '', // 小程序appid
'timeStamp': '',
'nonceStr': '', // 随机32位字符串
'package': 'prepay_id=wx261153585405162d4d02642eabe7000000', // 预支付交易会话标识
'paySign': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 秘钥
'signType': 'RSA', // 加密方式
}
调用支付
小程序支付的调用,请参考官方文档 调用 wx.requestPayment(OBJECT)
wx.requestPayment({
timeStamp: '',
nonceStr: '',
package: '',
signType: 'RSA', // MD5或RSA(根据返回使用)
paySign: '',
success (res) { },
fail (res) { }
})
商家转账到零钱(仅支持直连商户)
请求示例
// 如果使用服务商模式支付,可在初始化是修改配置,使用直连商户秘钥证书,对接商家转账到零钱
$pay = new \fengkui\Pay\Wechat($wechatConfig);
$order = [
'body' => 'subject-测试', // 商品描述
'order_sn' => time(), // 商户订单号
'amount' => 1, // 转账总金额
'openid' => 'openidxxxxxxxx', // 用户在直连商户应用下的用户标示(单用户转账时使用)
];
$order['scene_id'] = 'xxxxxx'; // (选填)该批次转账使用的转账场景
$order['notify_url'] = 'xxxxxx'; // (选填)不携带参数的https,异步接收微信支付结果通知的回调地址
$result = $pay->transfer($order);
多用户转账时添加一下参数
$order['list'] = [ // 转账用户列表(多个用户转账时使用)
[
'amount' => 1, // 单用户转账金额
'openid' => 'openidxxxxxxxx111',
'name' => '用户1', // 用户在直连商户应用下的用户标示(不必填)
'remark' => '备注', // 单条转账备注(微信用户会收到该备注)(不必填)
],
[
'amount' => 2,
'openid' => 'openidxxxxxxxx222',
],
];
提现参数配置
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,appid
,sign
等参数,大家只需传入订单类主观参数即可。
所有订单配置参数和官方无异,参数请参考这里,查看「请求参数」一栏。
返回示例
{
"appid": "wxf636efh567hg4356",
"out_batch_no": "plfk2020042013",
"batch_name": "2019年1月深圳分部报销单",
"batch_remark": "2019年1月深圳分部报销单",
"total_amount": 4000000,
"total_num": 200,
"transfer_detail_list": [
{
"out_detail_no": "x23zy545Bd5436",
"transfer_amount": 200000,
"transfer_remark": "2020年4月报销",
"openid": "o-MYE42l80oelYMDE34nYD456Xoy",
"user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45"
}
]
}