文档更新太慢,自己都忍不住要抱怨了。可能越来越慢了
Payment 3.0
微信的配置设置文档请 点击这里
项目GitHub地址:https://github.com/helei112g/payment
为了调用方便,提供了统一的 Client\Charge
类来发起支付。需要设置的参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
body | boolean | 是 | 商品描述 |
subject | string | 是 | 商品名称,该参数最长为128个汉字 |
order_no | string | 是 | 商户网站唯一订单号 |
timeout_express | string | 是 | 设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭。 |
amount | float | 是 | 该笔订单的资金总额,单位为RMB-Yuan |
return_param | string | 是 | 附加数据,在查询API和支付通知中原样返回 |
client_ip | string | 是 | 用户端实际ip |
terminal_id | string | 是 | 自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传"WEB" |
product_id | string | 否 | 商品ID |
openid | string | 否 | 此参数为微信用户在商户对应appid下的唯一标识 |
在上面的参数中,无论微信的哪一种支付都必须提供:
- body
- subject
- order_no
- timeout_express
- amount
- return_param
- client_ip
- terminal_id
这几个参数,是必须进行设置的。
扫码支付
用户扫描商户展示在各种场景的二维码进行支付。这里采用的是模式二。
对于扫码支付,必须提供: product_id 参数,该 product_id
是商户自己平台的信息,可用使用sku。
如果扫码支付时,传入了 openid
,则扫码时,只能使用对应的微信扫码才能完成支付。这里可以根据自己的需求来决定。
扫码支付,模式二介绍
刷卡支付
刷卡支付,就是用于用户向商户展示二维码,商户通过扫码枪获取二维码或者条码信息,完成收款。与上面的扫码支付相对应。
auth_code
是必须设置的参数,扫码支付授权码,设备读取用户微信中的条码或者二维码信息
app支付
适用于商户在移动端APP中集成微信支付功能。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。
目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)。
该支付方式,无需额外的参数信息,只需要上面表格中标记的必须参数。
公众号支付
商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程。
这里记住一定时微信内部打开h5页面。
openid
是公众号支付必须提供的信息,微信用户在商户对应appid下的唯一标识。openid如何获取,可参考获取openid
这里用到了 openid,也就说明该支付只能由发起支付请求的公众号完成支付。
因此,如果有时候遇到:“下单账号和支付账号不一致” ,那么肯定是发起支付请求的时候是一个帐号,而进行支付时变成了另外一个微信帐号导致的。
小程序支付与公众号支付具有相同的请求参数
h5支付
H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。
主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付
微信这个支付能力,并未完全开放,申请的条件也比较苛刻。不过说实话也不好用。
参数跟app支付一样,不需要添加额外的信息。
代码
下面代码实例一下
use Payment\Common\PayException;
use Payment\Client\Charge;
$config = require_once('./wxconfig.php');// 微信的配置信息
$channel = 'wx_app';// wx_app wx_pub wx_qr wx_bar wx_lite wx_wap
$payData = [
'body' => '一个苹果',
'subject' => '牛逼公司--付款吧',
'order_no' => 'NB12312355',
'timeout_express' => '1489241888',
'amount' => '100',
'return_param' => 'buy some',
'client_ip' => '127.0.0.1',
'terminal_id' => 'WEB',
//'product_id' => '888',
//'openid' => 'xxxxxxx',
];
// product_id openid 参数,并不是每一个支付都需要,具体行为阅读上面文档
try {
$str = Charge::run($channel, $config, $payData);
} catch (PayException $e) {
// 异常处理
exit;
}
if (is_array($ret)) {
var_dump($ret);
} else {
header('Location:' . $ret);
echo htmlspecialchars($ret);
}
exit;
关于 channel
的说明:
渠道 | 说明 |
---|---|
wx_app | 代表app支付 |
wx_pub | 代表公众号支付 |
wx_qr | 代表扫码支付 |
wx_bar | 代表刷卡支付 |
wx_lite | 代表小程序支付 |
wx_wap | 代表h5支付 |
关于支付返回的各种数据,以及相关支付方式,如果调起微信支付,请自行查看对应文档。