微信支付:app支付、公众号支付、扫码支付使用文档。
payment 项目2.x版本
微信的支付逻辑与支付宝的支付有一些差别。为了让客户端忽略这些差别,统一调用。本sdk做了对应处理。
# SDK调用
微信支付不同接口需要的参数会有差别。请大家在使用接口时,仔细查看文档。
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| use Payment\ChargeContext; use Payment\Config; use Payment\Common\PayException;
date_default_timezone_set('Asia/Shanghai');
function createPayid() { return date('Ymdhis', time()).substr(floor(microtime()*1000),0,1).rand(0,9); }
$payData = [ "order_no" => createPayid(), "amount" => '0.01', "client_ip" => '127.0.0.1', "subject" => '测试支付', "body" => '支付接口测试', "extra_param" => '', ];
$payData['product_id'] = '123456';
$payData['openid'] = 'otijfvr2oMz3tXnaQdKKbQeeBmhM';
* 包含客户的配置文件 * 本次 2.0 版本,主要的改变是将配置文件独立出来,便于客户多个账号的情况 * 已经使用不同方式读取配置文件,如:db file cache等 */ $wxconfig = [ 'app_id' => 'wxxxx', 'mch_id' => 'xxxx', 'md5_key' => 'xxxxxx',
'notify_url' => 'http://test.helei.com/pay-notify.html', 'time_expire' => '14',
'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem', 'key_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem', ];
* 实例化支付环境类,进行支付创建 */ $charge = new ChargeContext();
try {
$type = Config::WX_CHANNEL_QR;
$charge->initCharge($type, $wxconfig); $ret = $charge->charge($payData); } catch (PayException $e) { echo $e->errorMessage();exit; }
if ($type === Config::WX_CHANNEL_QR) { $url = urlencode($ret); echo "<img alt='扫码支付' src='http://paysdk.weixin.qq.com/example/qrcode.php?data={$url}' style='width:150px;height:150px;'/>"; } elseif ($type === Config::WX_CHANNEL_PUB) { $json = $ret; var_dump($json);exit; } elseif (stripos($type, 'wx') !== false) { var_dump($ret); }
?>
|
这里扫码支付与公众号支付分别需要提供不同的参数。请一定注意进行区分。否则调用相应端口会抛出异常。
配置文件
参数 |
参数名 |
参数说明 |
是否必须 |
app_id |
公众账号ID/应用id |
微信分配的公众账号ID |
是 |
mch_id |
商户号 |
微信支付分配的商户号 |
是 |
md5_key |
加密的key |
在商户中心设置 |
是 |
notify_url |
通知地址 |
接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 |
是 |
time_expire |
交易过期时间 |
单位为分钟,过期后无法再次支付 |
是 |
cert_path |
密钥文件 |
可在微信商户后台中下载 |
否,退款需要 |
key_path |
密钥文件 |
可在商户中心下载 |
否,退款需要 |
这里需要注意的是,app_id,由于微信的三个支付接口,需要对应两个不同的app_id。因此再开发中一定要注意。
请求参数
参数 |
参数名 |
参数说明 |
是否必须 |
order_no |
订单号 |
平台根据规则生成的订单号,最长64位,要在商户数据库中唯一 |
必须 |
amount |
交易总金额 |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
必须 |
client_ip |
客户端IP |
用户在创建交易时,该用户当前所使用机器的IP。 |
必须 |
subject |
商品名称 |
商品的标题/交易标题/订单标题/订单关键字等。该参数最长为128个汉字。 |
必须 |
body |
商品描述 |
对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。 |
必须 |
extra_param |
公用回传参数 |
如果用户请求时传递了该参数,则返回给商户时会回传该参数。 |
可选 |
product_id |
商品ID |
扫码支付,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 |
可选 |
openid |
用户标识 |
公众号支付,此参数必传,用户在商户appid下的唯一标识。 |
可选 |
返回值描述
三种支付方式返回值因为处理方式不同,微信方面返回了不同的类型。
- app支付返回了需要调用的数组。调用客户端的方式 查看微信文档
- 扫码支付返回了一个地址。可生成一个二维码,完成支付。
- 公众号支付,返回的是一个json数据。可直接放入微信的sdk完成jsapi调用。