WeChat決済-カード決済
9062 ワード
WeChat支払-支払コードをスキャンして支払う方法
先日、プロジェクトに微信の支払いが必要だったため、スキャンコードを通じて微信の支払いコードをスキャンし、微信の支払いカードを呼び出してapiの引き落としを支払った.そこでこの記事では、カード決済apiの使い方についても紹介します.
まず、微信の公式提供の支払いdemoを見てみましょう.リンク:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1#
appid(あなたの公衆番号appid)、mchid(微信支払業者番号)、key(微信支払業者鍵)、appsecret(微信のsecert)を記入する必要があります.そしてboby(商品名)、total_fee(支払い金額)、auth_コード.
これらの情報の入手方法については、WxPay.Config.phpファイルに見えます.他のパラメータdemoに書いてあります.そのまま持ってきて使えばいいです.
ユーザーの支払コードと商品名と金額を取得する手順です.次に、スイープされた支払いapiメソッドmicropay()の送信を呼び出す.ウィーチャットにリクエストを送信し、リクエストに成功したリクエストエラーが含まれている一連の配列に戻ります.返されたデータは、微信決済ドキュメントで詳細に表示されます.https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1
返されたデータにresultフィールドがあることを覚えておいてください.このフィールドでは、ユーザーが支払いに成功したかどうか、success=成功、fail=失敗を判断できます.
微信側は戻ってきたデータを検証します.
//②、 ,
if($result["return_code"] == "SUCCESS" &&
$result["result_code"] == "FAIL" &&
$result["err_code"] != "USERPAYING" &&
$result["err_code"] != "SYSTEMERROR")
{
return false;
}
微信側がカード決済を処理する流れは、返却結果に基づいて注文方法を調べると、10回繰り返し、1回約2秒かかります.10回後に変更がない場合は、注文の取り消し方法を呼び出します.
//③、
$queryTimes = 2;
while ($queryTimes > 0) {
$succResult = 0;
$queryResult = $this->query($out_trade_no, $succResult);
// 1s
echo $succResult;
if ($succResult == 2) {
sleep(10);
$error = array(
'result' => 'Payment error'
);
exit(json_encode($error));
} else if ($succResult == 1) {//
$success = array(
'result' => 'Payment successful'
);
echo json_encode($success);
return $queryResult;
} else if ($succResult == 3) {// shibai
$error = array(
'result' => 'Payment error'
);
exit(json_encode($error));
} else {//
$error = array(
'result' => 'Payment error'
);
echo json_encode($error);
return false;
}
}
/**
*
*
* @param string $out_trade_no
* @param int $succCode
* @return 0 ,1 ,2
*/
public function query($out_trade_no, &$succCode)
{
$queryOrderInput = new WxPayOrderQuery();
$queryOrderInput->SetOut_trade_no($out_trade_no);
$result = WxPayApi::orderQuery($queryOrderInput);
echo $result['trade_state'];
if ($result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS"
) {
//
if ($result["trade_state"] == "SUCCESS") {
$succCode = 1;
return $result;
} //
else if ($result["trade_state"] == "USERPAYING") {
$succCode = 2;
return false;
} else if ($result["trade_state"] == "PAYERROR") {
$succCode = 3;
return false;
}
}
// “ ”
if ($result["err_code"] == "ORDERNOTEXIST") {
$succCode = 0;
} else {
// ,
$succCode = 2;
}
return false;
}
実際に支払う場合、支払い成功(success)、支払い失敗(fail)、支払い中(userbeen)の3つの状態があります.
そのため、店舗で支払いコードをスキャンするにはユーザーが支払いパスワードを入力する必要がある場合があります.それがuserbeenの状態なので、こちらで自分でこの状態を処理し、状態=userbeenであれば注文を繰り返し調べます.20秒を超えるとデフォルトで支払いに失敗します.関連コードはサーバーにあるので、貼らないで、誰かが必要なら教えてくれればいいです.
もちろん他にも、NOTENOUGH(残高不足)、NOTSUPORTCARD(カードがサポートされていないタイプ)などの状態があります.詳細は公式ドキュメントに記載されています.
スキャン支払いについては先にお話しし、後で問題があれば更新します.