配置參數
- 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:
- 需要能夠正確處理第三方重復的支付結果通知。
- 異步通知除了簽名驗證,必須校驗返回的訂單金額是否與商戶側的訂單金額一致。
- 可以查詢第三方該訂單的支付狀態,來返回給前端。
- 用戶支付失敗時,重新生成訂單的邏輯。(關閉失敗訂單)
- 小心謹慎。