例のQIWIと新しいRESTプロトコル

ご挨拶。
私はHabrの長年の読者であり、ここで私の質問への回答をしばしば見つけます。 しかし、たまたま答えが見つからなかった。 そしてどこにもありません。
そして、タスクは次のとおりでした。 QIWIシステムに新しい(REST)プロトコルを実装します。 トライアル、エラー、マネージャーおよびサポートチームとのコミュニケーションを使用して適切なソリューションを見つけるために数日費やさなければなりませんでした。 タスクはそれほど難しくありませんが、どこにも例はありません。
この投稿では、私がとても見逃していた例を共有したいと思います。 これが誰かを助けることを願っています。
私はすぐに言って、私は絵を描いたり、噛んだり、詳細に説明したりしません。 必要だと思う基本的なものだけがあります。 それでも、誰もが自分の好みと目標を持っています。
まず、ストアを登録する必要がありますhttp://ishopnew.qiwi.ru/
[接続方法]セクションに登録すると、[新しいプロトコル]項目が見つかります。 そこで、新しいプロトコルのAPI記述をダウンロードできます。

リクエストを送信するために、cURLを使用しました。
これがどうだったかです:
$requestType = 'POST'; //  REST    $url = 'some url'; //     $parameters = array(); //      $loginPass = $id . ':' . $password; // ID   (    ) $headers = array( "Accept: text/json", "Content-Type: application/x-www-form-urlencoded; charset=utf-8" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, $loginPass); if ($requestType != 'GET') { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $requestType); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); } $httpResponse = curl_exec($ch); if (!$httpResponse) { //  ,   echo curl_error($ch).'('.curl_errno($ch).')'; return false; } $httpResponseAr = json_decode($httpResponse); return $httpResponseAr->response; 

すべてがシンプルで明確だと思います。

次に、実行できる操作。

ドキュメントはすべてについて非常に詳細です。 私は自分の開発を妨げるいくつかのことに焦点を当てています。

各操作について個別に説明します。

1)ユーザーへの請求
 $requestType = 'PUT'; $url = 'https://w.qiwi.com/api/v2/prv/{prv_id}/bills/{bill_id}'; // {prv_id} –   ,    ID . // {bill_id} –   ,          . $parameters = array( 'user' => 'tel:+79999999999', 'amount' => 0.1, 'ccy' => 'RUB', 'comment' => ' QIWI', 'pay_source' => 'qw', 'lifetime' => date('c', $timePlusHour), 'prv_name' => 'QIWI', ); 

パラメータを使用すると、すべてが明確になります。

2)アカウントステータスのリクエスト
請求後に請求書が支払われなかった場合は、ステータスを確認する必要があります。 おそらく、システムが応答を遅らせたか、またはユーザーが少し後で応答することを決めた場合、cronを使用できます。
 $requestType = 'GET'; $url = 'https://w.qiwi.com/api/v2/prv/{prv_id}/bills/{bill_id}'; //   $parameters = array(); 


3)請求書を支払うための転送
正常に請求した後、ユーザーを支払いページにリダイレクトする必要があります。 ここでは、cURLは使用されず、単にリダイレクトされます。
 $url = 'https://w.qiwi.com/order/external/main.action?shop={prv_id }&transaction={bill_id}'; $url .= '&successUrl=' . $successUrl; $url .= '&failUrl=' . $failUrl; // {prv_id}  {bill_id}     . // $successUrl  $failUrl         . 


4)未払いの請求書をキャンセルする
請求書をキャンセルするために使用されます。 請求書を発行しても支払いが行われない場合、システムはストア設定で指定されたアドレスに、アカウントのステータスの確認を求めるPOSTリクエストを送信します。 回答しない場合、最終的にストア設定で指定されたメールへのメールが届きます。
 $requestType = 'PATCH'; $url = 'https://w.qiwi.com/api/v2/prv/{prv_id}/bills/{bill_id}'; //   $parameters = array( 'status' => 'rejected' ); 


5)有料アカウントの払い戻し
払い戻しをリクエストできます。
 $requestType = 'PUT'; $url = 'https://w.qiwi.com/api/v2/prv/{prv_id}/bills/{bill_id}/refund/{refund_id}'; //  ,  {refund_id}    $parameters = array( 'amount' => $amount ); 


6)返却ステータスを確認する
上記のリクエストの返品ステータスも確認する必要があります。
 $requestType = 'GET'; $url = 'https://w.qiwi.com/api/v2/prv/{prv_id}/bills/{bill_id}/refund/{refund_id}'; //  ,  {refund_id}         $parameters = array(); 


サーバーの応答については、ドキュメントで詳しく説明しています。

また、2つのPOST要求ハンドラーを作成する必要があります。これについては、段落4で説明しました。 要求は、処理する必要があるいくつかのパラメーターを送信します。
  1. bill_id = BILL-1
  2. ステータス=支払済み
  3. エラー= 0
  4. 金額= 1.00
  5. ユーザー= tel%3A%2B79031811737
  6. prv_name = TEST
  7. ccy = RUB
  8. コメント=テスト
  9. コマンド=請求書

リクエストの送信先住所に応じて、支払いの処理方法を確認して決定する必要があります。 支払いが完了し、リクエストが成功した場合にお金を入金するか、お金が入金されたが支払いが失敗した場合に残高を減らすためのいずれか。

そしてもちろん、テストについて別のseparateりを表明したいと思います。 QIWIシステムにはテストモードまたはテストサイトがないため、ウォレットを使用して、たとえば10コペックなどの支払いを行う必要があります。

このメッセージが、プロジェクトで新しいプロトコルを使用しようとしている人々にとって少し助けになれば幸いです。 結局のところ、彼はQIWIがあるすべての国から支払いを受ける機会を約束します。

Source: https://habr.com/ru/post/J198668/


All Articles