[toc]
配置参数
- appid
appid 是微信公众账号或开放平台 APP 的唯一标识,在公众平台申请公众账号或者在开放平台申请APP账号后,微信会自动分配对应的 appid,用于标识该应用。可在微信公众平台–>开发者中心查看,商户的微信支付审核通过邮件中也会包含该字段值(APPID)。
- mch_id
商户申请微信支付后,由微信支付分配的商户收款账号,邮件中的参数为微信支付商户号。
- key
交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播。商户妥善保管该 Key,切勿在网络中传输,不能在其他客户端中存储,保证 key 不会被泄漏。商户可根据邮件提示登录微信商户平台进行设置。也可按一下路径设置:微信商户平台(pay.weixin.qq.com)–>账户设置–> API 安全–>密钥设置。邮件中参数 API 密钥。
- secret
AppSecret 是 APPID 对应的接口密码,用于获取接口调用凭证 access_token 时使用。邮件中参数 Appsecret
安装 PHP 扩展
这里推荐一个很好用的支付扩展包,它集成了支付宝支付和微信支付。
yansongda/pay
composer require yansongda/pay -vvv
微信支付简单使用
<?php
namespace XXX\Api;
use Yansongda\Pay\Pay;
class PayTool
{
/* 微信 APP 支付配置参数*/
protected $wxConfig = [
'appid' => 'wx18xxxxxxxxxxxxx',
'mch_id' => '151xxxxxxxxx',
'key' => '267xxxxx7b89xxxxxxxxxxxxxx',
'notify_url' => 'http://xxx.xxx.xxx/xxx/PayTool.wxVerify'
];
protected function wxPay()
{
return Pay::wechat($this->wxConfig);
}
/* 生成带签名的客户端订单信息*/
public function getSign($type = 'wx')
{
try {
/* 订单号*/
$out_trade_no = 'wx'.date('YmdHis');
switch ($type) {
case 'wx':
$order = [
'out_trade_no' => $out_trade_no,
/* 金额,单位:分*/
'total_fee' => '1',
/* 商品描述*/
'body' => 'APP名-商品描述',
];
$wxPay = self::wxPay();
$pay = $wxPay->app($order);
break;
default:
throw new \Exception('支付方式异常');
}
return [
'status' => 200,
'result' => json_decode($pay->getContent(), true)
];
} catch (\Exception $e) {
return ['status' => 500, 'result' => $e->getMessage()];
}
}
/* 微信支付结果异步通知*/
public function wxVerify()
{
try {
$wxPay = self::wxPay();
$result = $wxPay->verify();
if ($result) {
$response = $wxPay->success();
/* 日志记录*/
$wxPayLogs = new WXPayLogs();
$wxPayLogs->content = $response->getContent();
/* all 字段中包括了详细的返回信息*/
$wxPayLogs->all = $result->toArray();
$wxPayLogs->save();
/* 返回成功参数给微信*/
return $response->send();
}
} catch (\Exception $e) {
$wxPayLogs = new WXPayLogs();
$wxPayLogs->content = $e->getMessage() ;
$wxPayLogs->save();
}
}
}
后续
建议查看 yansongda/pay 的文档, 并结合自己的业务需求进行整合。
Note:
- 需要能够正确处理第三方重复的支付结果通知。
- 异步通知除了签名验证,必须校验返回的订单金额是否与商户侧的订单金额一致。
- 可以查询第三方该订单的支付状态,来返回给前端。
- 用户支付失败时,重新生成订单的逻辑。(关闭失败订单)
- 小心谨慎。