PayPayManager.php
7.78 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
// =============================================================================
// PayPayマネージャ
// =============================================================================
require_once(__DIR__ . '/composer/vendor/autoload.php');
include(__DIR__ . "/constants.php");
use PayPay\OpenPaymentAPI\Client;
use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload;
class PayPayManager {
private $client = null;
// =======================================================
// コンストラクタ
// =======================================================
public function __construct ($api_key, $api_secret, $merchant_id) {
$this->$client = new Client([
'API_KEY' => $api_key,
'API_SECRET' => $api_secret,
'MERCHANT_ID' => $merchant_id
], PAYPAY_IS_STAGING); //Set True for Production Environment. By Default this is set False for Sandbox Environment.
// ドキュメンのミス?
}
// =======================================================
// コード作成
// https://developer.paypay.ne.jp/products/docs/appinvoke#dynamic-qr-codeid
// アプリコールを使用して支払いを受け取るには、まずコードを作成する必要があります。
// $merchant_payment_id string(64) : 加盟店から提供された一意の支払い取引ID
// $price integer(11) : 支払金額
// $user_agent string(?) : トランザクションの発生元であるWebブラウザーのUser Agent
// =======================================================
public function create_code ($merchant_payment_id, $price, $user_agent) {
// setup payment object
$CQCPayload = new CreateQrCodePayload();
// Set merchant pay identifier
$CQCPayload->setMerchantPaymentId($merchant_payment_id);
// Log time of request
$CQCPayload->setRequestedAt();
// Indicate you want QR Code
$CQCPayload->setCodeType("ORDER_QR");
// TODO 明細情報
// Provide order details for invoicing
// $OrderItems = [];
// $OrderItems[] = (new OrderItem())
// ->setName('お食事代')
// ->setQuantity(1)
// ->setUnitPrice('amount' => 20, 'currency' => 'JPY']);
// $CQCPayload->setOrderItems($OrderItems);
// Save Cart totals
$amount = [
"amount" => $price,
"currency" => "JPY"
];
$CQCPayload->setAmount($amount);
// Configure redirects
$CQCPayload->setRedirectType('WEB_LINK');
$CQCPayload->setRedirectUrl(PAYPAY_REDIRECT_URL);
// User Agent
$CQCPayload->setUserAgent($user_agent);
// Get data for QR code
$response = $this->$client->code->createQRCode($CQCPayload);
return $response;
}
// =======================================================
// コード削除
// https://developer.paypay.ne.jp/products/docs/appinvoke#delete-qr-codeid
// 生成したコードを削除したい場合こちらを利用ください。 このAPIを使用する理由として、次のことが考えられます。
// ユーザーが注文をキャンセルした場合
// ユーザーがPayPayアプリを開いて支払いを行わず、競合状態が発生しない目的でコードを削除する場合
// 処理を実施する場合には、以下のパラメーターを使用してリクエストしてください。
// $code_id string(?) : `Create a Code`メソッドのレスポンス値に含まれます。
// =======================================================
public function delete_code ($code_id) {
// Calling the method to delete a QR Code
$response = $this->$client->code->deleteQRCode($code_id);
return $response;
}
// =======================================================
// 決済情報取得
// https://developer.paypay.ne.jp/products/docs/appinvoke#fetch-qr-code
// 決済情報について参照をすることができます。このAPIを利用し決済が完了しているか確認してください。`create a code`の支払いプロセスは非同期で行われるため、このAPIをポーリング実装する必要があります。以下のパラメーターを設定することで、決済情報を参照することができます。
// $merchant_payment_id string(64) : 加盟店から提供された一意の支払い取引ID
// =======================================================
public function get_payment_details ($merchant_payment_id) {
// Calling the method to get payment details
$response = $this->$client->payment->getPaymentDetails($merchant_payment_id);
return $response;
}
// =======================================================
// 決済取り消し
// https://developer.paypay.ne.jp/products/docs/appinvoke#cancel-payment
// 決済をキャンセルしたい場合にこちらを利用ください。通常の決済フローでは基本的には、`Cancel a payment`を使いませんが以下の場合に利用ください。
// --Polling for Get Payment Details timeout, and you are uncertain of the status
// 注:`Cancel a payment`は、支払いが行われた翌日の00:14:59まで使用できます。 00:15 AM以降の場合、`Refund a payment`を呼び出して支払いを払い戻します。
// $merchant_payment_id string(64) : 加盟店から提供された一意の支払い取引ID
// =======================================================
public function cancel_payment ($merchant_payment_id) {
// Calling the method to cancel a Payment
$response = $this->$client->payment->cancelPayment($merchant_payment_id);
return $response;
}
// =======================================================
// 払い戻し処理
// https://developer.paypay.ne.jp/products/docs/appinvoke#refund-payment
// 決済が正常に完了しユーザーへの商品の提供後に、返品する場合に`Refund a payment`を使用ください。タイムアウトやシステム的なエラーが出て、決済処理を中止する場合には、`Cancel a payment`を活用ください。主要な項目を以下に記載しますので、以下のパラメーターを使用してリクエストしてください。
//
// $merchant_refund_id string(64) : 加盟店から提供された一意の払い戻し取引ID
// $payment_id string(64) : PayPayが決済後に発番する取引ID
// $amount integer(11) : 返金金額
// $reason string(255) : 返金理由
// =======================================================
public function refund_payment ($merchant_refund_id, $payment_id, $amount, $reason) {
// Creating the payload to refund a Payment, additional parameters can be added basis the API Documentation
$payload = new PaypaySdk/Payload();
$payload->set_merchant_refund_id('merchant_refund_id');
$payload->set_merchant_payment_id('paypay_payment_id');
$amount = [
"amount" => 1,
"currency" => "JPY"
];
$payload->set_amount($amount);
$payload->set_reason("Reason for Refund");
// Calling the method to refund a Payment
$response = $this->$client->refund->refundPayment($payload);
return $response;
}
// =======================================================
// 払い戻しのステータスと詳細を取得する
// https://developer.paypay.ne.jp/products/docs/appinvoke#fetch-refund-payment
// 返金処理(`Refund a payment`)がタイムアウトをした場合には、このAPIを利用ください。処理を実施する場合には、以下のパラメーターを使用してリクエストしてください。
// $merchant_refund_id string(64) : 加盟店から提供された一意の返品取引ID
// =======================================================
public function fetch_refund_status_and_details ($merchant_refund_id) {
// Calling the method to get Refund Details
$response = $this->$client->refund->getRefundDetails($merchant_refund_id);
return $response;
}
}
?>