文档更新太慢,自己都忍不住要抱怨了。可能越来越慢了

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
  • 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支付一样,不需要添加额外的信息。

外部网页唤起微信支付

代码

下面代码实例一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

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支付

关于支付返回的各种数据,以及相关支付方式,如果调起微信支付,请自行查看对应文档。