@boostengine/collections 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -83
- package/bin/cli.cjs +49 -0
- package/collections/cashfree.collection.json +651 -0
- package/collections/delhivery.collection.json +270 -0
- package/collections/easyecom.collection.json +84 -82
- package/collections/paytm.collection.json +161 -0
- package/collections/phonepe.collection.json +359 -0
- package/collections/razorpay.collection.json +527 -90
- package/collections/shiprocket.collection.json +490 -0
- package/collections/shopify.collection.json +351 -0
- package/collections/stripe.collection.json +322 -0
- package/dist/index.cjs +602 -66
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.mjs +602 -66
- package/dist/index.mjs.map +1 -1
- package/environments/cashfree.env.json +67 -0
- package/environments/delhivery.env.json +31 -0
- package/environments/paytm.env.json +49 -0
- package/environments/phonepe.env.json +85 -0
- package/environments/razorpay.env.json +12 -0
- package/environments/shiprocket.env.json +61 -0
- package/environments/shopify.env.json +31 -0
- package/environments/stripe.env.json +31 -0
- package/package.json +22 -3
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"info": {
|
|
3
|
+
"_postman_id": "pt123456-5555-4abc-def6-789012345678",
|
|
4
|
+
"name": "Paytm Payment Gateway Full API Collection",
|
|
5
|
+
"description": "Production Postman Collection for Paytm All-In-One PG (Initiate Transaction Token, Fetch Payment Status, Process Refund, Refund Status, Dynamic QR, and S2S Webhooks Simulator).",
|
|
6
|
+
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
7
|
+
},
|
|
8
|
+
"auth": {
|
|
9
|
+
"type": "noauth"
|
|
10
|
+
},
|
|
11
|
+
"item": [
|
|
12
|
+
{
|
|
13
|
+
"name": "1. Transaction & Checkout",
|
|
14
|
+
"description": "Initiate checkout and generate txnToken for Paytm JS Checkout SDK / App SDK.",
|
|
15
|
+
"item": [
|
|
16
|
+
{
|
|
17
|
+
"name": "Initiate Transaction (Generate txnToken)",
|
|
18
|
+
"event": [
|
|
19
|
+
{
|
|
20
|
+
"listen": "test",
|
|
21
|
+
"script": {
|
|
22
|
+
"exec": [
|
|
23
|
+
"var jsonData = pm.response.json();",
|
|
24
|
+
"if (jsonData && jsonData.body && jsonData.body.txnToken) {",
|
|
25
|
+
" pm.environment.set('paytm_txn_token', jsonData.body.txnToken);",
|
|
26
|
+
" console.log('Saved paytm_txn_token: ' + jsonData.body.txnToken);",
|
|
27
|
+
"}"
|
|
28
|
+
],
|
|
29
|
+
"type": "text/javascript"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"request": {
|
|
34
|
+
"method": "POST",
|
|
35
|
+
"header": [
|
|
36
|
+
{ "key": "Content-Type", "value": "application/json" }
|
|
37
|
+
],
|
|
38
|
+
"body": {
|
|
39
|
+
"mode": "raw",
|
|
40
|
+
"raw": "{\n \"head\": {\n \"signature\": \"{{paytm_checksum}}\"\n },\n \"body\": {\n \"requestType\": \"Payment\",\n \"mid\": \"{{paytm_mid}}\",\n \"websiteName\": \"DEFAULT\",\n \"orderId\": \"ORDER_PTM_{{$timestamp}}\",\n \"callbackUrl\": \"{{local_webhook_url}}\",\n \"txnAmount\": {\n \"value\": \"1499.00\",\n \"currency\": \"INR\"\n },\n \"userInfo\": {\n \"custId\": \"CUST_{{$timestamp}}\",\n \"mobile\": \"9876543210\",\n \"email\": \"aman@example.com\"\n }\n }\n}"
|
|
41
|
+
},
|
|
42
|
+
"url": {
|
|
43
|
+
"raw": "{{paytm_base_url}}/theia/api/v1/initiateTransaction?mid={{paytm_mid}}&orderId=ORDER_PTM_{{$timestamp}}",
|
|
44
|
+
"host": ["{{paytm_base_url}}"],
|
|
45
|
+
"path": ["theia", "api", "v1", "initiateTransaction"],
|
|
46
|
+
"query": [
|
|
47
|
+
{ "key": "mid", "value": "{{paytm_mid}}" },
|
|
48
|
+
{ "key": "orderId", "value": "ORDER_PTM_{{$timestamp}}" }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"description": "Initiates payment session and returns txnToken used by frontend checkout."
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "2. Payment Status Verification",
|
|
58
|
+
"description": "Query Paytm backend for real-time payment status.",
|
|
59
|
+
"item": [
|
|
60
|
+
{
|
|
61
|
+
"name": "Transaction Status Check",
|
|
62
|
+
"request": {
|
|
63
|
+
"method": "POST",
|
|
64
|
+
"header": [
|
|
65
|
+
{ "key": "Content-Type", "value": "application/json" }
|
|
66
|
+
],
|
|
67
|
+
"body": {
|
|
68
|
+
"mode": "raw",
|
|
69
|
+
"raw": "{\n \"head\": {\n \"signature\": \"{{paytm_checksum}}\"\n },\n \"body\": {\n \"mid\": \"{{paytm_mid}}\",\n \"orderId\": \"{{paytm_order_id}}\"\n }\n}"
|
|
70
|
+
},
|
|
71
|
+
"url": {
|
|
72
|
+
"raw": "{{paytm_base_url}}/v3/order/status",
|
|
73
|
+
"host": ["{{paytm_base_url}}"],
|
|
74
|
+
"path": ["v3", "order", "status"]
|
|
75
|
+
},
|
|
76
|
+
"description": "Verifies transaction state (TXN_SUCCESS, TXN_FAILURE, PENDING)."
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "3. Refunds API",
|
|
83
|
+
"description": "Trigger and monitor refund status.",
|
|
84
|
+
"item": [
|
|
85
|
+
{
|
|
86
|
+
"name": "Initiate Refund",
|
|
87
|
+
"request": {
|
|
88
|
+
"method": "POST",
|
|
89
|
+
"header": [
|
|
90
|
+
{ "key": "Content-Type", "value": "application/json" }
|
|
91
|
+
],
|
|
92
|
+
"body": {
|
|
93
|
+
"mode": "raw",
|
|
94
|
+
"raw": "{\n \"head\": {\n \"signature\": \"{{paytm_checksum}}\"\n },\n \"body\": {\n \"mid\": \"{{paytm_mid}}\",\n \"txnType\": \"REFUND\",\n \"orderId\": \"{{paytm_order_id}}\",\n \"txnId\": \"{{paytm_txn_id}}\",\n \"refId\": \"REFUND_PTM_{{$timestamp}}\",\n \"refundAmount\": \"1499.00\"\n }\n}"
|
|
95
|
+
},
|
|
96
|
+
"url": {
|
|
97
|
+
"raw": "{{paytm_base_url}}/refund/apply",
|
|
98
|
+
"host": ["{{paytm_base_url}}"],
|
|
99
|
+
"path": ["refund", "apply"]
|
|
100
|
+
},
|
|
101
|
+
"description": "Initiates refund to source payment method."
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"name": "Check Refund Status",
|
|
106
|
+
"request": {
|
|
107
|
+
"method": "POST",
|
|
108
|
+
"header": [
|
|
109
|
+
{ "key": "Content-Type", "value": "application/json" }
|
|
110
|
+
],
|
|
111
|
+
"body": {
|
|
112
|
+
"mode": "raw",
|
|
113
|
+
"raw": "{\n \"head\": {\n \"signature\": \"{{paytm_checksum}}\"\n },\n \"body\": {\n \"mid\": \"{{paytm_mid}}\",\n \"orderId\": \"{{paytm_order_id}}\",\n \"refId\": \"REFUND_PTM_001\"\n }\n}"
|
|
114
|
+
},
|
|
115
|
+
"url": {
|
|
116
|
+
"raw": "{{paytm_base_url}}/v2/refund/status",
|
|
117
|
+
"host": ["{{paytm_base_url}}"],
|
|
118
|
+
"path": ["v2", "refund", "status"]
|
|
119
|
+
},
|
|
120
|
+
"description": "Checks status of refund (TXN_SUCCESS, PENDING)."
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"name": "4. Webhooks Simulator",
|
|
127
|
+
"description": "Simulated Paytm S2S payment notification.",
|
|
128
|
+
"item": [
|
|
129
|
+
{
|
|
130
|
+
"name": "Webhook: Payment Response S2S",
|
|
131
|
+
"request": {
|
|
132
|
+
"method": "POST",
|
|
133
|
+
"header": [
|
|
134
|
+
{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }
|
|
135
|
+
],
|
|
136
|
+
"body": {
|
|
137
|
+
"mode": "urlencoded",
|
|
138
|
+
"urlencoded": [
|
|
139
|
+
{ "key": "MID", "value": "{{paytm_mid}}" },
|
|
140
|
+
{ "key": "ORDERID", "value": "ORDER_PTM_1001" },
|
|
141
|
+
{ "key": "TXNAMOUNT", "value": "1499.00" },
|
|
142
|
+
{ "key": "CURRENCY", "value": "INR" },
|
|
143
|
+
{ "key": "STATUS", "value": "TXN_SUCCESS" },
|
|
144
|
+
{ "key": "RESPCODE", "value": "01" },
|
|
145
|
+
{ "key": "RESPMSG", "value": "Txn Success" },
|
|
146
|
+
{ "key": "BANKTXNID", "value": "109283719283" },
|
|
147
|
+
{ "key": "PAYMENTMODE", "value": "UPI" },
|
|
148
|
+
{ "key": "CHECKSUMHASH", "value": "{{paytm_checksum}}" }
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
"url": {
|
|
152
|
+
"raw": "{{local_webhook_url}}",
|
|
153
|
+
"host": ["{{local_webhook_url}}"]
|
|
154
|
+
},
|
|
155
|
+
"description": "Simulates S2S POST callback sent by Paytm on transaction completion."
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
{
|
|
2
|
+
"info": {
|
|
3
|
+
"_postman_id": "pe123456-7890-4abc-def1-234567890123",
|
|
4
|
+
"name": "PhonePe PG Standard & Custom Full Collection",
|
|
5
|
+
"description": "Production Postman Collection for PhonePe PG (Standard Web Checkout, Custom UPI Intent Flow, UPI Collect VPA, Dynamic QR, Status Verification, Refunds, S2S Webhooks). Includes Pre-request scripts for automatic Base64 encoding and SHA256 X-VERIFY Checksum generation.",
|
|
6
|
+
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
7
|
+
},
|
|
8
|
+
"auth": {
|
|
9
|
+
"type": "noauth"
|
|
10
|
+
},
|
|
11
|
+
"item": [
|
|
12
|
+
{
|
|
13
|
+
"name": "1. Standard Web Checkout",
|
|
14
|
+
"description": "PhonePe Standard Hosted Pay Page flow with auto-checksum calculation.",
|
|
15
|
+
"item": [
|
|
16
|
+
{
|
|
17
|
+
"name": "Initiate Standard Payment Request",
|
|
18
|
+
"event": [
|
|
19
|
+
{
|
|
20
|
+
"listen": "prerequest",
|
|
21
|
+
"script": {
|
|
22
|
+
"exec": [
|
|
23
|
+
"var txnId = 'MT_' + Date.now();",
|
|
24
|
+
"pm.environment.set('phonepe_txn_id', txnId);",
|
|
25
|
+
"var payload = {",
|
|
26
|
+
" merchantId: pm.environment.get('phonepe_merchant_id') || 'PGTESTPAYUAT',",
|
|
27
|
+
" merchantTransactionId: txnId,",
|
|
28
|
+
" merchantUserId: 'MUID_' + Date.now(),",
|
|
29
|
+
" amount: 149900,",
|
|
30
|
+
" redirectUrl: 'https://yourstore.com/order-success?id=' + txnId,",
|
|
31
|
+
" redirectMode: 'POST',",
|
|
32
|
+
" callbackUrl: pm.environment.get('local_webhook_url') || 'https://api.yourstore.com/webhooks/phonepe',",
|
|
33
|
+
" mobileNumber: '9876543210',",
|
|
34
|
+
" paymentInstrument: {",
|
|
35
|
+
" type: 'PAY_PAGE'",
|
|
36
|
+
" }",
|
|
37
|
+
"};",
|
|
38
|
+
"var base64Payload = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(payload)));",
|
|
39
|
+
"pm.environment.set('phonepe_base64_payload', base64Payload);",
|
|
40
|
+
"var saltKey = pm.environment.get('phonepe_salt_key') || '099eb0cd-02cf-4e2a-8aca-3e6c6aff0399';",
|
|
41
|
+
"var saltIndex = pm.environment.get('phonepe_salt_index') || '1';",
|
|
42
|
+
"var stringToHash = base64Payload + '/pg/v1/pay' + saltKey;",
|
|
43
|
+
"var sha256Hash = CryptoJS.SHA256(stringToHash).toString();",
|
|
44
|
+
"var xVerify = sha256Hash + '###' + saltIndex;",
|
|
45
|
+
"pm.environment.set('phonepe_x_verify', xVerify);"
|
|
46
|
+
],
|
|
47
|
+
"type": "text/javascript"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"listen": "test",
|
|
52
|
+
"script": {
|
|
53
|
+
"exec": [
|
|
54
|
+
"var jsonData = pm.response.json();",
|
|
55
|
+
"if (jsonData && jsonData.data && jsonData.data.instrumentResponse) {",
|
|
56
|
+
" pm.environment.set('phonepe_redirect_url', jsonData.data.instrumentResponse.redirectInfo.url);",
|
|
57
|
+
" console.log('PhonePe checkout redirect URL:', jsonData.data.instrumentResponse.redirectInfo.url);",
|
|
58
|
+
"}"
|
|
59
|
+
],
|
|
60
|
+
"type": "text/javascript"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"request": {
|
|
65
|
+
"method": "POST",
|
|
66
|
+
"header": [
|
|
67
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
68
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_x_verify}}" }
|
|
69
|
+
],
|
|
70
|
+
"body": {
|
|
71
|
+
"mode": "raw",
|
|
72
|
+
"raw": "{\n \"request\": \"{{phonepe_base64_payload}}\"\n}"
|
|
73
|
+
},
|
|
74
|
+
"url": {
|
|
75
|
+
"raw": "{{phonepe_base_url}}/pg/v1/pay",
|
|
76
|
+
"host": ["{{phonepe_base_url}}"],
|
|
77
|
+
"path": ["pg", "v1", "pay"]
|
|
78
|
+
},
|
|
79
|
+
"description": "Standard PhonePe Web Pay Page. Computes Base64 request body and X-VERIFY checksum in pre-request script."
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "2. Custom Mobile / App Flows (Intent & VPA)",
|
|
86
|
+
"description": "Mobile App SDK and Direct Intent Checkout.",
|
|
87
|
+
"item": [
|
|
88
|
+
{
|
|
89
|
+
"name": "Initiate UPI Intent Payment (Mobile Apps)",
|
|
90
|
+
"event": [
|
|
91
|
+
{
|
|
92
|
+
"listen": "prerequest",
|
|
93
|
+
"script": {
|
|
94
|
+
"exec": [
|
|
95
|
+
"var txnId = 'MT_INTENT_' + Date.now();",
|
|
96
|
+
"pm.environment.set('phonepe_txn_id', txnId);",
|
|
97
|
+
"var payload = {",
|
|
98
|
+
" merchantId: pm.environment.get('phonepe_merchant_id') || 'PGTESTPAYUAT',",
|
|
99
|
+
" merchantTransactionId: txnId,",
|
|
100
|
+
" merchantUserId: 'MUID_' + Date.now(),",
|
|
101
|
+
" amount: 149900,",
|
|
102
|
+
" callbackUrl: pm.environment.get('local_webhook_url') || 'https://api.yourstore.com/webhooks/phonepe',",
|
|
103
|
+
" mobileNumber: '9876543210',",
|
|
104
|
+
" paymentInstrument: {",
|
|
105
|
+
" type: 'UPI_INTENT',",
|
|
106
|
+
" targetApp: 'com.phonepe.app'",
|
|
107
|
+
" }",
|
|
108
|
+
"};",
|
|
109
|
+
"var base64Payload = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(payload)));",
|
|
110
|
+
"pm.environment.set('phonepe_intent_base64', base64Payload);",
|
|
111
|
+
"var saltKey = pm.environment.get('phonepe_salt_key') || '099eb0cd-02cf-4e2a-8aca-3e6c6aff0399';",
|
|
112
|
+
"var saltIndex = pm.environment.get('phonepe_salt_index') || '1';",
|
|
113
|
+
"var stringToHash = base64Payload + '/pg/v1/pay' + saltKey;",
|
|
114
|
+
"var sha256Hash = CryptoJS.SHA256(stringToHash).toString();",
|
|
115
|
+
"pm.environment.set('phonepe_intent_x_verify', sha256Hash + '###' + saltIndex);"
|
|
116
|
+
],
|
|
117
|
+
"type": "text/javascript"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"request": {
|
|
122
|
+
"method": "POST",
|
|
123
|
+
"header": [
|
|
124
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
125
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_intent_x_verify}}" }
|
|
126
|
+
],
|
|
127
|
+
"body": {
|
|
128
|
+
"mode": "raw",
|
|
129
|
+
"raw": "{\n \"request\": \"{{phonepe_intent_base64}}\"\n}"
|
|
130
|
+
},
|
|
131
|
+
"url": {
|
|
132
|
+
"raw": "{{phonepe_base_url}}/pg/v1/pay",
|
|
133
|
+
"host": ["{{phonepe_base_url}}"],
|
|
134
|
+
"path": ["pg", "v1", "pay"]
|
|
135
|
+
},
|
|
136
|
+
"description": "Returns intentUrl to trigger PhonePe Android/iOS app directly without browser redirect."
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"name": "Initiate UPI Collect (VPA Flow)",
|
|
141
|
+
"event": [
|
|
142
|
+
{
|
|
143
|
+
"listen": "prerequest",
|
|
144
|
+
"script": {
|
|
145
|
+
"exec": [
|
|
146
|
+
"var txnId = 'MT_VPA_' + Date.now();",
|
|
147
|
+
"pm.environment.set('phonepe_txn_id', txnId);",
|
|
148
|
+
"var payload = {",
|
|
149
|
+
" merchantId: pm.environment.get('phonepe_merchant_id') || 'PGTESTPAYUAT',",
|
|
150
|
+
" merchantTransactionId: txnId,",
|
|
151
|
+
" merchantUserId: 'MUID_' + Date.now(),",
|
|
152
|
+
" amount: 149900,",
|
|
153
|
+
" callbackUrl: pm.environment.get('local_webhook_url') || 'https://api.yourstore.com/webhooks/phonepe',",
|
|
154
|
+
" mobileNumber: '9876543210',",
|
|
155
|
+
" paymentInstrument: {",
|
|
156
|
+
" type: 'UPI_COLLECT',",
|
|
157
|
+
" vpa: 'aman@oksbi'",
|
|
158
|
+
" }",
|
|
159
|
+
"};",
|
|
160
|
+
"var base64Payload = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(payload)));",
|
|
161
|
+
"pm.environment.set('phonepe_vpa_base64', base64Payload);",
|
|
162
|
+
"var saltKey = pm.environment.get('phonepe_salt_key') || '099eb0cd-02cf-4e2a-8aca-3e6c6aff0399';",
|
|
163
|
+
"var saltIndex = pm.environment.get('phonepe_salt_index') || '1';",
|
|
164
|
+
"var stringToHash = base64Payload + '/pg/v1/pay' + saltKey;",
|
|
165
|
+
"var sha256Hash = CryptoJS.SHA256(stringToHash).toString();",
|
|
166
|
+
"pm.environment.set('phonepe_vpa_x_verify', sha256Hash + '###' + saltIndex);"
|
|
167
|
+
],
|
|
168
|
+
"type": "text/javascript"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
],
|
|
172
|
+
"request": {
|
|
173
|
+
"method": "POST",
|
|
174
|
+
"header": [
|
|
175
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
176
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_vpa_x_verify}}" }
|
|
177
|
+
],
|
|
178
|
+
"body": {
|
|
179
|
+
"mode": "raw",
|
|
180
|
+
"raw": "{\n \"request\": \"{{phonepe_vpa_base64}}\"\n}"
|
|
181
|
+
},
|
|
182
|
+
"url": {
|
|
183
|
+
"raw": "{{phonepe_base_url}}/pg/v1/pay",
|
|
184
|
+
"host": ["{{phonepe_base_url}}"],
|
|
185
|
+
"path": ["pg", "v1", "pay"]
|
|
186
|
+
},
|
|
187
|
+
"description": "Sends UPI collect request directly to customer VPA handle."
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "Create Dynamic UPI QR",
|
|
192
|
+
"event": [
|
|
193
|
+
{
|
|
194
|
+
"listen": "prerequest",
|
|
195
|
+
"script": {
|
|
196
|
+
"exec": [
|
|
197
|
+
"var txnId = 'MT_QR_' + Date.now();",
|
|
198
|
+
"pm.environment.set('phonepe_txn_id', txnId);",
|
|
199
|
+
"var payload = {",
|
|
200
|
+
" merchantId: pm.environment.get('phonepe_merchant_id') || 'PGTESTPAYUAT',",
|
|
201
|
+
" transactionId: txnId,",
|
|
202
|
+
" merchantOrderId: 'ORD_' + Date.now(),",
|
|
203
|
+
" amount: 149900,",
|
|
204
|
+
" expiresIn: 600,",
|
|
205
|
+
" storeId: 'STORE_01',",
|
|
206
|
+
" terminalId: 'TERM_01'",
|
|
207
|
+
"};",
|
|
208
|
+
"var base64Payload = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(payload)));",
|
|
209
|
+
"pm.environment.set('phonepe_qr_base64', base64Payload);",
|
|
210
|
+
"var saltKey = pm.environment.get('phonepe_salt_key') || '099eb0cd-02cf-4e2a-8aca-3e6c6aff0399';",
|
|
211
|
+
"var saltIndex = pm.environment.get('phonepe_salt_index') || '1';",
|
|
212
|
+
"var stringToHash = base64Payload + '/pg/v1/qr/init' + saltKey;",
|
|
213
|
+
"var sha256Hash = CryptoJS.SHA256(stringToHash).toString();",
|
|
214
|
+
"pm.environment.set('phonepe_qr_x_verify', sha256Hash + '###' + saltIndex);"
|
|
215
|
+
],
|
|
216
|
+
"type": "text/javascript"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
"request": {
|
|
221
|
+
"method": "POST",
|
|
222
|
+
"header": [
|
|
223
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
224
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_qr_x_verify}}" }
|
|
225
|
+
],
|
|
226
|
+
"body": {
|
|
227
|
+
"mode": "raw",
|
|
228
|
+
"raw": "{\n \"request\": \"{{phonepe_qr_base64}}\"\n}"
|
|
229
|
+
},
|
|
230
|
+
"url": {
|
|
231
|
+
"raw": "{{phonepe_base_url}}/pg/v1/qr/init",
|
|
232
|
+
"host": ["{{phonepe_base_url}}"],
|
|
233
|
+
"path": ["pg", "v1", "qr", "init"]
|
|
234
|
+
},
|
|
235
|
+
"description": "Initializes a dynamic QR code for desktop checkout or in-store POS."
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"name": "3. Status Verification API",
|
|
242
|
+
"description": "Verify payment transaction status via S2S polling.",
|
|
243
|
+
"item": [
|
|
244
|
+
{
|
|
245
|
+
"name": "Check Order Payment Status",
|
|
246
|
+
"event": [
|
|
247
|
+
{
|
|
248
|
+
"listen": "prerequest",
|
|
249
|
+
"script": {
|
|
250
|
+
"exec": [
|
|
251
|
+
"var merchantId = pm.environment.get('phonepe_merchant_id') || 'PGTESTPAYUAT';",
|
|
252
|
+
"var txnId = pm.environment.get('phonepe_txn_id') || 'MT_TEST_001';",
|
|
253
|
+
"var saltKey = pm.environment.get('phonepe_salt_key') || '099eb0cd-02cf-4e2a-8aca-3e6c6aff0399';",
|
|
254
|
+
"var saltIndex = pm.environment.get('phonepe_salt_index') || '1';",
|
|
255
|
+
"var endpoint = '/pg/v1/status/' + merchantId + '/' + txnId;",
|
|
256
|
+
"var stringToHash = endpoint + saltKey;",
|
|
257
|
+
"var sha256Hash = CryptoJS.SHA256(stringToHash).toString();",
|
|
258
|
+
"pm.environment.set('phonepe_status_x_verify', sha256Hash + '###' + saltIndex);"
|
|
259
|
+
],
|
|
260
|
+
"type": "text/javascript"
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
"request": {
|
|
265
|
+
"method": "GET",
|
|
266
|
+
"header": [
|
|
267
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
268
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_status_x_verify}}" },
|
|
269
|
+
{ "key": "X-MERCHANT-ID", "value": "{{phonepe_merchant_id}}" }
|
|
270
|
+
],
|
|
271
|
+
"url": {
|
|
272
|
+
"raw": "{{phonepe_base_url}}/pg/v1/status/{{phonepe_merchant_id}}/{{phonepe_txn_id}}",
|
|
273
|
+
"host": ["{{phonepe_base_url}}"],
|
|
274
|
+
"path": ["pg", "v1", "status", "{{phonepe_merchant_id}}", "{{phonepe_txn_id}}"]
|
|
275
|
+
},
|
|
276
|
+
"description": "Fetches status of transaction (PAYMENT_SUCCESS, PAYMENT_ERROR, PAYMENT_PENDING)."
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
]
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "4. Refunds API",
|
|
283
|
+
"description": "Trigger and monitor refund requests.",
|
|
284
|
+
"item": [
|
|
285
|
+
{
|
|
286
|
+
"name": "Initiate Refund",
|
|
287
|
+
"event": [
|
|
288
|
+
{
|
|
289
|
+
"listen": "prerequest",
|
|
290
|
+
"script": {
|
|
291
|
+
"exec": [
|
|
292
|
+
"var refundTxnId = 'RF_' + Date.now();",
|
|
293
|
+
"pm.environment.set('phonepe_refund_id', refundTxnId);",
|
|
294
|
+
"var payload = {",
|
|
295
|
+
" merchantId: pm.environment.get('phonepe_merchant_id') || 'PGTESTPAYUAT',",
|
|
296
|
+
" merchantTransactionId: refundTxnId,",
|
|
297
|
+
" originalTransactionId: pm.environment.get('phonepe_txn_id') || 'MT_TEST_001',",
|
|
298
|
+
" amount: 149900,",
|
|
299
|
+
" callbackUrl: pm.environment.get('local_webhook_url') || 'https://api.yourstore.com/webhooks/phonepe'",
|
|
300
|
+
"};",
|
|
301
|
+
"var base64Payload = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(payload)));",
|
|
302
|
+
"pm.environment.set('phonepe_refund_base64', base64Payload);",
|
|
303
|
+
"var saltKey = pm.environment.get('phonepe_salt_key') || '099eb0cd-02cf-4e2a-8aca-3e6c6aff0399';",
|
|
304
|
+
"var saltIndex = pm.environment.get('phonepe_salt_index') || '1';",
|
|
305
|
+
"var stringToHash = base64Payload + '/pg/v1/refund' + saltKey;",
|
|
306
|
+
"var sha256Hash = CryptoJS.SHA256(stringToHash).toString();",
|
|
307
|
+
"pm.environment.set('phonepe_refund_x_verify', sha256Hash + '###' + saltIndex);"
|
|
308
|
+
],
|
|
309
|
+
"type": "text/javascript"
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
],
|
|
313
|
+
"request": {
|
|
314
|
+
"method": "POST",
|
|
315
|
+
"header": [
|
|
316
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
317
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_refund_x_verify}}" }
|
|
318
|
+
],
|
|
319
|
+
"body": {
|
|
320
|
+
"mode": "raw",
|
|
321
|
+
"raw": "{\n \"request\": \"{{phonepe_refund_base64}}\"\n}"
|
|
322
|
+
},
|
|
323
|
+
"url": {
|
|
324
|
+
"raw": "{{phonepe_base_url}}/pg/v1/refund",
|
|
325
|
+
"host": ["{{phonepe_base_url}}"],
|
|
326
|
+
"path": ["pg", "v1", "refund"]
|
|
327
|
+
},
|
|
328
|
+
"description": "Initiates a refund back to customer source account."
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"name": "5. S2S Callback / Webhook Simulator",
|
|
335
|
+
"description": "Simulate server-to-server webhook callbacks sent by PhonePe on payment completion.",
|
|
336
|
+
"item": [
|
|
337
|
+
{
|
|
338
|
+
"name": "S2S Callback: PAYMENT_SUCCESS",
|
|
339
|
+
"request": {
|
|
340
|
+
"method": "POST",
|
|
341
|
+
"header": [
|
|
342
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
343
|
+
{ "key": "X-VERIFY", "value": "{{phonepe_mock_callback_verify}}" }
|
|
344
|
+
],
|
|
345
|
+
"body": {
|
|
346
|
+
"mode": "raw",
|
|
347
|
+
"raw": "{\n \"response\": \"eyJzdWNjZXNzIjp0cnVlLCJjb2RlIjoiUEFZTUVOVF9TVUNDRVNTIiwibWVzc2FnZSI6IlBheW1lbnQgc3VjY2Vzc2Z1bCIsImRhdGEiOnsibWVyY2hhbnRJZCI6IlBHVEVTVFBBWVVBVCIsIm1lcmNoYW50VHJhbnNhY3Rpb25JZCI6Ik1UXzA5MjE3MzgxIiwidHJhbnNhY3Rpb25JZCI6IlQyNDA5MDgxODMwMTAiLCJhbW91bnQiOjE0OTkwMCwic3RhdGUiOiJDT01QTEVURUQiLCJyZXNwb25zZUNvZGUiOiJTVUNDRVNTIn19\"\n}"
|
|
348
|
+
},
|
|
349
|
+
"url": {
|
|
350
|
+
"raw": "{{local_webhook_url}}",
|
|
351
|
+
"host": ["{{local_webhook_url}}"]
|
|
352
|
+
},
|
|
353
|
+
"description": "Simulates PhonePe Base64 decoded PAYMENT_SUCCESS server callback."
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
}
|
|
358
|
+
]
|
|
359
|
+
}
|