@atbas/m-mcp 0.1.0
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/LICENSE +21 -0
- package/README.md +364 -0
- package/dist/builder/transaction-builder.d.ts +53 -0
- package/dist/builder/transaction-builder.d.ts.map +1 -0
- package/dist/builder/transaction-builder.js +159 -0
- package/dist/builder/transaction-builder.js.map +1 -0
- package/dist/catalogue/default-catalogue.d.ts +18 -0
- package/dist/catalogue/default-catalogue.d.ts.map +1 -0
- package/dist/catalogue/default-catalogue.js +21 -0
- package/dist/catalogue/default-catalogue.js.map +1 -0
- package/dist/catalogue/endpoints.d.ts +22 -0
- package/dist/catalogue/endpoints.d.ts.map +1 -0
- package/dist/catalogue/endpoints.js +24 -0
- package/dist/catalogue/endpoints.js.map +1 -0
- package/dist/catalogue/flows.d.ts +32 -0
- package/dist/catalogue/flows.d.ts.map +1 -0
- package/dist/catalogue/flows.js +64 -0
- package/dist/catalogue/flows.js.map +1 -0
- package/dist/catalogue/hash-options.d.ts +112 -0
- package/dist/catalogue/hash-options.d.ts.map +1 -0
- package/dist/catalogue/hash-options.js +151 -0
- package/dist/catalogue/hash-options.js.map +1 -0
- package/dist/catalogue/types.d.ts +279 -0
- package/dist/catalogue/types.d.ts.map +1 -0
- package/dist/catalogue/types.js +360 -0
- package/dist/catalogue/types.js.map +1 -0
- package/dist/codegen/generate.d.ts +14 -0
- package/dist/codegen/generate.d.ts.map +1 -0
- package/dist/codegen/generate.js +490 -0
- package/dist/codegen/generate.js.map +1 -0
- package/dist/codegen/languages/node.d.ts +3 -0
- package/dist/codegen/languages/node.d.ts.map +1 -0
- package/dist/codegen/languages/node.js +32 -0
- package/dist/codegen/languages/node.js.map +1 -0
- package/dist/codegen/languages/php.d.ts +3 -0
- package/dist/codegen/languages/php.d.ts.map +1 -0
- package/dist/codegen/languages/php.js +27 -0
- package/dist/codegen/languages/php.js.map +1 -0
- package/dist/codegen/languages/python.d.ts +3 -0
- package/dist/codegen/languages/python.d.ts.map +1 -0
- package/dist/codegen/languages/python.js +27 -0
- package/dist/codegen/languages/python.js.map +1 -0
- package/dist/codegen/renderer.d.ts +24 -0
- package/dist/codegen/renderer.d.ts.map +1 -0
- package/dist/codegen/renderer.js +59 -0
- package/dist/codegen/renderer.js.map +1 -0
- package/dist/codegen/types.d.ts +50 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +5 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/config/credentials.d.ts +64 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +216 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/environment.d.ts +23 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +54 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/core/dependencies.d.ts +43 -0
- package/dist/core/dependencies.d.ts.map +1 -0
- package/dist/core/dependencies.js +2 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/registry.d.ts +33 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +13 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/server.d.ts +61 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +90 -0
- package/dist/core/server.js.map +1 -0
- package/dist/dependencies.d.ts +28 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +2 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/diagnostics/diagnose.d.ts +43 -0
- package/dist/diagnostics/diagnose.d.ts.map +1 -0
- package/dist/diagnostics/diagnose.js +121 -0
- package/dist/diagnostics/diagnose.js.map +1 -0
- package/dist/domain/amount.d.ts +157 -0
- package/dist/domain/amount.d.ts.map +1 -0
- package/dist/domain/amount.js +275 -0
- package/dist/domain/amount.js.map +1 -0
- package/dist/domain/datetime.d.ts +95 -0
- package/dist/domain/datetime.d.ts.map +1 -0
- package/dist/domain/datetime.js +211 -0
- package/dist/domain/datetime.js.map +1 -0
- package/dist/domain/response-codes.d.ts +116 -0
- package/dist/domain/response-codes.d.ts.map +1 -0
- package/dist/domain/response-codes.js +380 -0
- package/dist/domain/response-codes.js.map +1 -0
- package/dist/domain/secure-hash.d.ts +78 -0
- package/dist/domain/secure-hash.d.ts.map +1 -0
- package/dist/domain/secure-hash.js +69 -0
- package/dist/domain/secure-hash.js.map +1 -0
- package/dist/domain/signature/jazzcash.d.ts +56 -0
- package/dist/domain/signature/jazzcash.d.ts.map +1 -0
- package/dist/domain/signature/jazzcash.js +214 -0
- package/dist/domain/signature/jazzcash.js.map +1 -0
- package/dist/domain/signature/registry.d.ts +69 -0
- package/dist/domain/signature/registry.d.ts.map +1 -0
- package/dist/domain/signature/registry.js +92 -0
- package/dist/domain/signature/registry.js.map +1 -0
- package/dist/domain/signature/scheme.d.ts +349 -0
- package/dist/domain/signature/scheme.d.ts.map +1 -0
- package/dist/domain/signature/scheme.js +398 -0
- package/dist/domain/signature/scheme.js.map +1 -0
- package/dist/domain/txn-ref.d.ts +76 -0
- package/dist/domain/txn-ref.d.ts.map +1 -0
- package/dist/domain/txn-ref.js +126 -0
- package/dist/domain/txn-ref.js.map +1 -0
- package/dist/domain/types.d.ts +45 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +70 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/errors.d.ts +84 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +87 -0
- package/dist/errors.js.map +1 -0
- package/dist/gateway/checkout-form.d.ts +16 -0
- package/dist/gateway/checkout-form.d.ts.map +1 -0
- package/dist/gateway/checkout-form.js +103 -0
- package/dist/gateway/checkout-form.js.map +1 -0
- package/dist/gateway/checkout-output.d.ts +70 -0
- package/dist/gateway/checkout-output.d.ts.map +1 -0
- package/dist/gateway/checkout-output.js +199 -0
- package/dist/gateway/checkout-output.js.map +1 -0
- package/dist/gateway/guards.d.ts +37 -0
- package/dist/gateway/guards.d.ts.map +1 -0
- package/dist/gateway/guards.js +44 -0
- package/dist/gateway/guards.js.map +1 -0
- package/dist/gateway/http-client.d.ts +42 -0
- package/dist/gateway/http-client.d.ts.map +1 -0
- package/dist/gateway/http-client.js +153 -0
- package/dist/gateway/http-client.js.map +1 -0
- package/dist/gateway/rest-client.d.ts +42 -0
- package/dist/gateway/rest-client.d.ts.map +1 -0
- package/dist/gateway/rest-client.js +241 -0
- package/dist/gateway/rest-client.js.map +1 -0
- package/dist/gateway/transport.d.ts +31 -0
- package/dist/gateway/transport.d.ts.map +1 -0
- package/dist/gateway/transport.js +73 -0
- package/dist/gateway/transport.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/install/cli.d.ts +38 -0
- package/dist/install/cli.d.ts.map +1 -0
- package/dist/install/cli.js +274 -0
- package/dist/install/cli.js.map +1 -0
- package/dist/install/harnesses.d.ts +74 -0
- package/dist/install/harnesses.d.ts.map +1 -0
- package/dist/install/harnesses.js +263 -0
- package/dist/install/harnesses.js.map +1 -0
- package/dist/knowledge/corpus.d.ts +15 -0
- package/dist/knowledge/corpus.d.ts.map +1 -0
- package/dist/knowledge/corpus.js +129 -0
- package/dist/knowledge/corpus.js.map +1 -0
- package/dist/knowledge/search.d.ts +29 -0
- package/dist/knowledge/search.d.ts.map +1 -0
- package/dist/knowledge/search.js +181 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/knowledge/source.d.ts +60 -0
- package/dist/knowledge/source.d.ts.map +1 -0
- package/dist/knowledge/source.js +91 -0
- package/dist/knowledge/source.js.map +1 -0
- package/dist/knowledge/types.d.ts +40 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +19 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/paths.d.ts +26 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +106 -0
- package/dist/paths.js.map +1 -0
- package/dist/prompts/integration-walkthrough.d.ts +11 -0
- package/dist/prompts/integration-walkthrough.d.ts.map +1 -0
- package/dist/prompts/integration-walkthrough.js +52 -0
- package/dist/prompts/integration-walkthrough.js.map +1 -0
- package/dist/prompts/register.d.ts +4 -0
- package/dist/prompts/register.d.ts.map +1 -0
- package/dist/prompts/register.js +4 -0
- package/dist/prompts/register.js.map +1 -0
- package/dist/registry.d.ts +14 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -0
- package/dist/resources/knowledge-resources.d.ts +5 -0
- package/dist/resources/knowledge-resources.d.ts.map +1 -0
- package/dist/resources/knowledge-resources.js +121 -0
- package/dist/resources/knowledge-resources.js.map +1 -0
- package/dist/resources/register.d.ts +4 -0
- package/dist/resources/register.d.ts.map +1 -0
- package/dist/resources/register.js +8 -0
- package/dist/resources/register.js.map +1 -0
- package/dist/server.d.ts +40 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +56 -0
- package/dist/server.js.map +1 -0
- package/dist/telemetry/logger.d.ts +31 -0
- package/dist/telemetry/logger.d.ts.map +1 -0
- package/dist/telemetry/logger.js +67 -0
- package/dist/telemetry/logger.js.map +1 -0
- package/dist/telemetry/redaction.d.ts +88 -0
- package/dist/telemetry/redaction.d.ts.map +1 -0
- package/dist/telemetry/redaction.js +238 -0
- package/dist/telemetry/redaction.js.map +1 -0
- package/dist/tools/build-transaction-parameters.d.ts +10 -0
- package/dist/tools/build-transaction-parameters.d.ts.map +1 -0
- package/dist/tools/build-transaction-parameters.js +154 -0
- package/dist/tools/build-transaction-parameters.js.map +1 -0
- package/dist/tools/call-context.d.ts +47 -0
- package/dist/tools/call-context.d.ts.map +1 -0
- package/dist/tools/call-context.js +15 -0
- package/dist/tools/call-context.js.map +1 -0
- package/dist/tools/codegen-tools.d.ts +4 -0
- package/dist/tools/codegen-tools.d.ts.map +1 -0
- package/dist/tools/codegen-tools.js +131 -0
- package/dist/tools/codegen-tools.js.map +1 -0
- package/dist/tools/credential-tools.d.ts +32 -0
- package/dist/tools/credential-tools.d.ts.map +1 -0
- package/dist/tools/credential-tools.js +65 -0
- package/dist/tools/credential-tools.js.map +1 -0
- package/dist/tools/descriptor.d.ts +52 -0
- package/dist/tools/descriptor.d.ts.map +1 -0
- package/dist/tools/descriptor.js +2 -0
- package/dist/tools/descriptor.js.map +1 -0
- package/dist/tools/diagnostic-tools.d.ts +3 -0
- package/dist/tools/diagnostic-tools.d.ts.map +1 -0
- package/dist/tools/diagnostic-tools.js +128 -0
- package/dist/tools/diagnostic-tools.js.map +1 -0
- package/dist/tools/gateway-tools.d.ts +6 -0
- package/dist/tools/gateway-tools.d.ts.map +1 -0
- package/dist/tools/gateway-tools.js +381 -0
- package/dist/tools/gateway-tools.js.map +1 -0
- package/dist/tools/hash-tools.d.ts +5 -0
- package/dist/tools/hash-tools.d.ts.map +1 -0
- package/dist/tools/hash-tools.js +238 -0
- package/dist/tools/hash-tools.js.map +1 -0
- package/dist/tools/knowledge-tools.d.ts +7 -0
- package/dist/tools/knowledge-tools.d.ts.map +1 -0
- package/dist/tools/knowledge-tools.js +247 -0
- package/dist/tools/knowledge-tools.js.map +1 -0
- package/dist/tools/onboarding-checklist.d.ts +3 -0
- package/dist/tools/onboarding-checklist.d.ts.map +1 -0
- package/dist/tools/onboarding-checklist.js +141 -0
- package/dist/tools/onboarding-checklist.js.map +1 -0
- package/dist/tools/register.d.ts +60 -0
- package/dist/tools/register.d.ts.map +1 -0
- package/dist/tools/register.js +145 -0
- package/dist/tools/register.js.map +1 -0
- package/dist/tools/tool-kit.d.ts +88 -0
- package/dist/tools/tool-kit.d.ts.map +1 -0
- package/dist/tools/tool-kit.js +297 -0
- package/dist/tools/tool-kit.js.map +1 -0
- package/dist/validation/payload-validator.d.ts +29 -0
- package/dist/validation/payload-validator.d.ts.map +1 -0
- package/dist/validation/payload-validator.js +79 -0
- package/dist/validation/payload-validator.js.map +1 -0
- package/dist/validation/rules/amount.d.ts +3 -0
- package/dist/validation/rules/amount.d.ts.map +1 -0
- package/dist/validation/rules/amount.js +77 -0
- package/dist/validation/rules/amount.js.map +1 -0
- package/dist/validation/rules/bill-reference.d.ts +10 -0
- package/dist/validation/rules/bill-reference.d.ts.map +1 -0
- package/dist/validation/rules/bill-reference.js +34 -0
- package/dist/validation/rules/bill-reference.js.map +1 -0
- package/dist/validation/rules/cnic.d.ts +3 -0
- package/dist/validation/rules/cnic.d.ts.map +1 -0
- package/dist/validation/rules/cnic.js +42 -0
- package/dist/validation/rules/cnic.js.map +1 -0
- package/dist/validation/rules/constants.d.ts +9 -0
- package/dist/validation/rules/constants.d.ts.map +1 -0
- package/dist/validation/rules/constants.js +28 -0
- package/dist/validation/rules/constants.js.map +1 -0
- package/dist/validation/rules/constraints.d.ts +3 -0
- package/dist/validation/rules/constraints.d.ts.map +1 -0
- package/dist/validation/rules/constraints.js +113 -0
- package/dist/validation/rules/constraints.js.map +1 -0
- package/dist/validation/rules/datetime.d.ts +3 -0
- package/dist/validation/rules/datetime.d.ts.map +1 -0
- package/dist/validation/rules/datetime.js +49 -0
- package/dist/validation/rules/datetime.js.map +1 -0
- package/dist/validation/rules/empty-string.d.ts +13 -0
- package/dist/validation/rules/empty-string.d.ts.map +1 -0
- package/dist/validation/rules/empty-string.js +32 -0
- package/dist/validation/rules/empty-string.js.map +1 -0
- package/dist/validation/rules/expiry.d.ts +3 -0
- package/dist/validation/rules/expiry.d.ts.map +1 -0
- package/dist/validation/rules/expiry.js +52 -0
- package/dist/validation/rules/expiry.js.map +1 -0
- package/dist/validation/rules/msisdn.d.ts +3 -0
- package/dist/validation/rules/msisdn.d.ts.map +1 -0
- package/dist/validation/rules/msisdn.js +45 -0
- package/dist/validation/rules/msisdn.js.map +1 -0
- package/dist/validation/rules/presence.d.ts +3 -0
- package/dist/validation/rules/presence.d.ts.map +1 -0
- package/dist/validation/rules/presence.js +90 -0
- package/dist/validation/rules/presence.js.map +1 -0
- package/dist/validation/rules/return-url.d.ts +14 -0
- package/dist/validation/rules/return-url.d.ts.map +1 -0
- package/dist/validation/rules/return-url.js +58 -0
- package/dist/validation/rules/return-url.js.map +1 -0
- package/dist/validation/rules/tool-argument.d.ts +16 -0
- package/dist/validation/rules/tool-argument.d.ts.map +1 -0
- package/dist/validation/rules/tool-argument.js +38 -0
- package/dist/validation/rules/tool-argument.js.map +1 -0
- package/dist/validation/rules/txn-ref.d.ts +3 -0
- package/dist/validation/rules/txn-ref.d.ts.map +1 -0
- package/dist/validation/rules/txn-ref.js +47 -0
- package/dist/validation/rules/txn-ref.js.map +1 -0
- package/dist/validation/rules/unknown-fields.d.ts +10 -0
- package/dist/validation/rules/unknown-fields.d.ts.map +1 -0
- package/dist/validation/rules/unknown-fields.js +29 -0
- package/dist/validation/rules/unknown-fields.js.map +1 -0
- package/dist/validation/types.d.ts +36 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +12 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/version.d.ts +23 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- package/knowledge/diagnostics/symptoms.json +321 -0
- package/knowledge/docs/bnpl-guide.md +77 -0
- package/knowledge/docs/card-page-redirection.md +67 -0
- package/knowledge/docs/card-refund.md +91 -0
- package/knowledge/docs/hmac-sha256-calculation.md +72 -0
- package/knowledge/docs/index.json +189 -0
- package/knowledge/docs/ipn-implementation.md +89 -0
- package/knowledge/docs/mwallet-recurring.md +117 -0
- package/knowledge/docs/mwallet-refund.md +65 -0
- package/knowledge/docs/mwallet-rest-v1-1.md +126 -0
- package/knowledge/docs/mwallet-rest-v2-0-cnic.md +113 -0
- package/knowledge/docs/portal-guide.md +45 -0
- package/knowledge/docs/shopify-guide.md +74 -0
- package/knowledge/docs/status-inquiry-2025-26.md +32 -0
- package/knowledge/docs/status-inquiry.md +111 -0
- package/knowledge/docs/wordpress-guide.md +49 -0
- package/knowledge/flow.schema.json +390 -0
- package/knowledge/flows/bnpl-page-redirection-v1.1.json +211 -0
- package/knowledge/flows/card-page-redirection-v1.1.json +211 -0
- package/knowledge/flows/mwallet-rest-v1.1.json +187 -0
- package/knowledge/flows/mwallet-rest-v2.0-cnic.json +197 -0
- package/knowledge/flows/mwallet-token-pay-v4.0.json +130 -0
- package/knowledge/flows/refund-bnpl.json +105 -0
- package/knowledge/flows/refund-card-v1.1.json +112 -0
- package/knowledge/flows/refund-card-v2.0.json +121 -0
- package/knowledge/flows/refund-mwallet-v1.1.json +106 -0
- package/knowledge/flows/status-inquiry-v1.1.json +102 -0
- package/knowledge/flows/status-inquiry-v2.0.json +103 -0
- package/knowledge/flows/token-delete-v1.json +85 -0
- package/knowledge/flows/token-inquiry-v1.json +85 -0
- package/knowledge/flows/wallet-linking-portal.json +103 -0
- package/knowledge/templates/node/checkout-redirect.tmpl +166 -0
- package/knowledge/templates/node/ipn-handler.tmpl +108 -0
- package/knowledge/templates/node/rest-client.tmpl +197 -0
- package/knowledge/templates/node/wallet-linking.tmpl +147 -0
- package/knowledge/templates/php/checkout-redirect.tmpl +149 -0
- package/knowledge/templates/php/ipn-handler.tmpl +105 -0
- package/knowledge/templates/php/rest-client.tmpl +191 -0
- package/knowledge/templates/php/wallet-linking.tmpl +137 -0
- package/knowledge/templates/python/checkout-redirect.tmpl +148 -0
- package/knowledge/templates/python/ipn-handler.tmpl +110 -0
- package/knowledge/templates/python/rest-client.tmpl +179 -0
- package/knowledge/templates/python/wallet-linking.tmpl +133 -0
- package/package.json +84 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "refund-mwallet-v1.1",
|
|
3
|
+
"title": "MWallet Refund API v1.1",
|
|
4
|
+
"provider": "jazzcash",
|
|
5
|
+
"product": "refund",
|
|
6
|
+
"version": "1.1",
|
|
7
|
+
"transport": "rest",
|
|
8
|
+
"summary": "Refund a completed mobile wallet transaction, in whole or in part.",
|
|
9
|
+
"useWhen": "A customer returns an order paid by mobile wallet.",
|
|
10
|
+
"endpoints": {
|
|
11
|
+
"sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/m-wallet/refund",
|
|
12
|
+
"production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/m-wallet/refund"
|
|
13
|
+
},
|
|
14
|
+
"sameEndpointForBothEnvironments": true,
|
|
15
|
+
"movesMoney": true,
|
|
16
|
+
"responseContext": "refund",
|
|
17
|
+
"constants": {
|
|
18
|
+
"pp_TxnCurrency": "PKR"
|
|
19
|
+
},
|
|
20
|
+
"parameters": [
|
|
21
|
+
{
|
|
22
|
+
"name": "pp_MerchantID",
|
|
23
|
+
"requirement": "mandatory",
|
|
24
|
+
"valueType": "string",
|
|
25
|
+
"notes": "From Integration > Credentials in the merchant portal."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "pp_Password",
|
|
29
|
+
"requirement": "mandatory",
|
|
30
|
+
"valueType": "string",
|
|
31
|
+
"notes": "From Integration > Credentials. Never render this into client-side code.",
|
|
32
|
+
"sensitive": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "pp_TxnRefNo",
|
|
36
|
+
"requirement": "mandatory",
|
|
37
|
+
"valueType": "txn-ref",
|
|
38
|
+
"notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
|
|
39
|
+
"maxLength": 20
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "pp_Amount",
|
|
43
|
+
"requirement": "mandatory",
|
|
44
|
+
"valueType": "minor-units",
|
|
45
|
+
"notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "pp_SecureHash",
|
|
49
|
+
"requirement": "mandatory",
|
|
50
|
+
"valueType": "secure-hash",
|
|
51
|
+
"notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "pp_TxnCurrency",
|
|
55
|
+
"requirement": "mandatory",
|
|
56
|
+
"valueType": "constant",
|
|
57
|
+
"notes": "The gateway processes PKR only and performs no conversion.",
|
|
58
|
+
"constantValue": "PKR"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "pp_MerchantMPIN",
|
|
62
|
+
"requirement": "mandatory",
|
|
63
|
+
"valueType": "string",
|
|
64
|
+
"notes": "Merchant MPIN, saved in the merchant portal. Refunds fail until it is set.",
|
|
65
|
+
"sensitive": true
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"hash": {
|
|
69
|
+
"algorithm": "hmac-sha256",
|
|
70
|
+
"includeFieldPrefixes": ["pp_", "ppmpf_"],
|
|
71
|
+
"excludeFields": ["pp_SecureHash", "SecureHash"],
|
|
72
|
+
"outputEncoding": "hex-lowercase",
|
|
73
|
+
"comparison": "case-insensitive"
|
|
74
|
+
},
|
|
75
|
+
"response": {
|
|
76
|
+
"hashField": "pp_SecureHash",
|
|
77
|
+
"hashFieldPrefixes": [],
|
|
78
|
+
"successField": "pp_ResponseCode",
|
|
79
|
+
"successValue": "000",
|
|
80
|
+
"messageField": "pp_ResponseMessage",
|
|
81
|
+
"hashVerification": "assumed-all-non-empty",
|
|
82
|
+
"notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_RefundAmount", "pp_TotalRefundAmount"]
|
|
83
|
+
},
|
|
84
|
+
"companionFlows": ["status-inquiry-v1.1"],
|
|
85
|
+
"docRefs": [
|
|
86
|
+
{
|
|
87
|
+
"docId": "mwallet-refund",
|
|
88
|
+
"sectionId": "api-endpoints",
|
|
89
|
+
"label": "Mobile Wallet Refund API, 2026"
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"knownIssues": [
|
|
93
|
+
{
|
|
94
|
+
"id": "identical-sandbox-and-production-endpoint",
|
|
95
|
+
"summary": "Sandbox and production use the same URL",
|
|
96
|
+
"detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
|
|
97
|
+
"guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "mpin-must-be-saved-in-portal",
|
|
101
|
+
"summary": "Refunds fail until the MPIN is saved in the merchant portal",
|
|
102
|
+
"detail": "The Shopify guide notes that refunds require the MPIN to already be stored in the merchant portal, in addition to being sent in the request.",
|
|
103
|
+
"guidance": "Save the MPIN in the portal before the first refund attempt."
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "status-inquiry-v1.1",
|
|
3
|
+
"title": "Status Inquiry API v1.1",
|
|
4
|
+
"provider": "jazzcash",
|
|
5
|
+
"product": "status-inquiry",
|
|
6
|
+
"version": "1.1",
|
|
7
|
+
"transport": "rest",
|
|
8
|
+
"summary": "Obtain the final status of a pending or missing transaction. Mandatory for every integration.",
|
|
9
|
+
"useWhen": "A transaction outcome is unknown, an IPN did not arrive, or you are reconciling.",
|
|
10
|
+
"endpoints": {
|
|
11
|
+
"sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/status/inquiry",
|
|
12
|
+
"production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/status/inquiry"
|
|
13
|
+
},
|
|
14
|
+
"sameEndpointForBothEnvironments": true,
|
|
15
|
+
"movesMoney": false,
|
|
16
|
+
"responseContext": "inquiry",
|
|
17
|
+
"constants": {},
|
|
18
|
+
"parameters": [
|
|
19
|
+
{
|
|
20
|
+
"name": "pp_TxnRefNo",
|
|
21
|
+
"requirement": "mandatory",
|
|
22
|
+
"valueType": "txn-ref",
|
|
23
|
+
"notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
|
|
24
|
+
"maxLength": 20
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "pp_MerchantID",
|
|
28
|
+
"requirement": "mandatory",
|
|
29
|
+
"valueType": "string",
|
|
30
|
+
"notes": "From Integration > Credentials in the merchant portal."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "pp_Password",
|
|
34
|
+
"requirement": "mandatory",
|
|
35
|
+
"valueType": "string",
|
|
36
|
+
"notes": "From Integration > Credentials. Never render this into client-side code.",
|
|
37
|
+
"sensitive": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "pp_SecureHash",
|
|
41
|
+
"requirement": "mandatory",
|
|
42
|
+
"valueType": "secure-hash",
|
|
43
|
+
"notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"hash": {
|
|
47
|
+
"algorithm": "hmac-sha256",
|
|
48
|
+
"includeFieldPrefixes": ["pp_", "ppmpf_"],
|
|
49
|
+
"excludeFields": ["pp_SecureHash", "SecureHash"],
|
|
50
|
+
"outputEncoding": "hex-lowercase",
|
|
51
|
+
"comparison": "case-insensitive"
|
|
52
|
+
},
|
|
53
|
+
"response": {
|
|
54
|
+
"hashField": "pp_SecureHash",
|
|
55
|
+
"hashFieldPrefixes": [],
|
|
56
|
+
"successField": "pp_ResponseCode",
|
|
57
|
+
"successValue": "000",
|
|
58
|
+
"messageField": "pp_ResponseMessage",
|
|
59
|
+
"hashVerification": "assumed-all-non-empty",
|
|
60
|
+
"notableFields": [
|
|
61
|
+
"pp_ResponseCode",
|
|
62
|
+
"pp_PaymentResponseCode",
|
|
63
|
+
"pp_Status",
|
|
64
|
+
"pp_RetrievalReferenceNo",
|
|
65
|
+
"pp_AuthCode"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"companionFlows": [],
|
|
69
|
+
"docRefs": [
|
|
70
|
+
{
|
|
71
|
+
"docId": "status-inquiry",
|
|
72
|
+
"sectionId": "api-version-1-1",
|
|
73
|
+
"label": "Status Inquiry Guide, 2026"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"knownIssues": [
|
|
77
|
+
{
|
|
78
|
+
"id": "identical-sandbox-and-production-endpoint",
|
|
79
|
+
"summary": "Sandbox and production use the same URL",
|
|
80
|
+
"detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
|
|
81
|
+
"guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "call-no-sooner-than-ten-minutes",
|
|
85
|
+
"summary": "Do not call before ten minutes have elapsed",
|
|
86
|
+
"detail": "The guide recommends calling this API a minimum of ten minutes after the transaction was initiated.",
|
|
87
|
+
"guidance": "Schedule the enquiry, rather than polling immediately after a timeout."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "two-codes-mean-different-things",
|
|
91
|
+
"summary": "pp_ResponseCode and pp_PaymentResponseCode answer different questions",
|
|
92
|
+
"detail": "pp_ResponseCode 000 means the enquiry itself succeeded. The payment outcome is in pp_PaymentResponseCode, where 121 means completed and debited.",
|
|
93
|
+
"guidance": "Never treat pp_ResponseCode 000 alone as proof of payment."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "2025-26-variant-copy-paste-defect",
|
|
97
|
+
"summary": "An older variant of this guide contains a contradictory sample",
|
|
98
|
+
"detail": "The 2025-26 edition shows pp_PaymentResponseMessage 'Sorry! Your transaction was not successful.' beside pp_Status 'Completed' and pp_PaymentResponseCode '121'.",
|
|
99
|
+
"guidance": "Use the 2026 edition. The message in the older sample is a copy-paste error, not a real combination."
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "status-inquiry-v2.0",
|
|
3
|
+
"title": "Status Inquiry API v2.0",
|
|
4
|
+
"provider": "jazzcash",
|
|
5
|
+
"product": "status-inquiry",
|
|
6
|
+
"version": "2.0",
|
|
7
|
+
"transport": "rest",
|
|
8
|
+
"summary": "Obtain the final status of a pending or missing transaction. Mandatory for every integration.",
|
|
9
|
+
"useWhen": "A transaction outcome is unknown, an IPN did not arrive, or you are reconciling.",
|
|
10
|
+
"endpoints": {
|
|
11
|
+
"sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v2/rest/payments/status/inquiry",
|
|
12
|
+
"production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v2/rest/payments/status/inquiry"
|
|
13
|
+
},
|
|
14
|
+
"sameEndpointForBothEnvironments": true,
|
|
15
|
+
"movesMoney": false,
|
|
16
|
+
"responseContext": "inquiry",
|
|
17
|
+
"constants": {},
|
|
18
|
+
"parameters": [
|
|
19
|
+
{
|
|
20
|
+
"name": "pp_TxnRefNo",
|
|
21
|
+
"requirement": "mandatory",
|
|
22
|
+
"valueType": "txn-ref",
|
|
23
|
+
"notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
|
|
24
|
+
"maxLength": 20
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "pp_MerchantID",
|
|
28
|
+
"requirement": "mandatory",
|
|
29
|
+
"valueType": "string",
|
|
30
|
+
"notes": "From Integration > Credentials in the merchant portal."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "pp_Password",
|
|
34
|
+
"requirement": "mandatory",
|
|
35
|
+
"valueType": "string",
|
|
36
|
+
"notes": "From Integration > Credentials. Never render this into client-side code.",
|
|
37
|
+
"sensitive": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "pp_SecureHash",
|
|
41
|
+
"requirement": "mandatory",
|
|
42
|
+
"valueType": "secure-hash",
|
|
43
|
+
"notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"hash": {
|
|
47
|
+
"algorithm": "hmac-sha256",
|
|
48
|
+
"includeFieldPrefixes": ["pp_", "ppmpf_"],
|
|
49
|
+
"excludeFields": ["pp_SecureHash", "SecureHash"],
|
|
50
|
+
"outputEncoding": "hex-lowercase",
|
|
51
|
+
"comparison": "case-insensitive"
|
|
52
|
+
},
|
|
53
|
+
"response": {
|
|
54
|
+
"hashField": "pp_SecureHash",
|
|
55
|
+
"hashFieldPrefixes": [],
|
|
56
|
+
"successField": "pp_ResponseCode",
|
|
57
|
+
"successValue": "000",
|
|
58
|
+
"messageField": "pp_ResponseMessage",
|
|
59
|
+
"hashVerification": "assumed-all-non-empty",
|
|
60
|
+
"notableFields": [
|
|
61
|
+
"pp_ResponseCode",
|
|
62
|
+
"pp_PaymentResponseCode",
|
|
63
|
+
"pp_Status",
|
|
64
|
+
"pp_TxnType",
|
|
65
|
+
"pp_Amount",
|
|
66
|
+
"pp_BillReference"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"companionFlows": [],
|
|
70
|
+
"docRefs": [
|
|
71
|
+
{
|
|
72
|
+
"docId": "status-inquiry",
|
|
73
|
+
"sectionId": "api-version-2-0",
|
|
74
|
+
"label": "Status Inquiry Guide, 2026"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"knownIssues": [
|
|
78
|
+
{
|
|
79
|
+
"id": "identical-sandbox-and-production-endpoint",
|
|
80
|
+
"summary": "Sandbox and production use the same URL",
|
|
81
|
+
"detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
|
|
82
|
+
"guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "call-no-sooner-than-ten-minutes",
|
|
86
|
+
"summary": "Do not call before ten minutes have elapsed",
|
|
87
|
+
"detail": "The guide recommends calling this API a minimum of ten minutes after the transaction was initiated.",
|
|
88
|
+
"guidance": "Schedule the enquiry, rather than polling immediately after a timeout."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "two-codes-mean-different-things",
|
|
92
|
+
"summary": "pp_ResponseCode and pp_PaymentResponseCode answer different questions",
|
|
93
|
+
"detail": "pp_ResponseCode 000 means the enquiry itself succeeded. The payment outcome is in pp_PaymentResponseCode, where 121 means completed and debited.",
|
|
94
|
+
"guidance": "Never treat pp_ResponseCode 000 alone as proof of payment."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "2025-26-variant-copy-paste-defect",
|
|
98
|
+
"summary": "An older variant of this guide contains a contradictory sample",
|
|
99
|
+
"detail": "The 2025-26 edition shows pp_PaymentResponseMessage 'Sorry! Your transaction was not successful.' beside pp_Status 'Completed' and pp_PaymentResponseCode '121'.",
|
|
100
|
+
"guidance": "Use the 2026 edition. The message in the older sample is a copy-paste error, not a real combination."
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "token-delete-v1",
|
|
3
|
+
"title": "MWallet Delete Token",
|
|
4
|
+
"provider": "jazzcash",
|
|
5
|
+
"product": "token",
|
|
6
|
+
"version": "1.0",
|
|
7
|
+
"transport": "rest",
|
|
8
|
+
"summary": "Delete a payment token, removing its association with the customer's account.",
|
|
9
|
+
"useWhen": "A customer cancels a subscription or asks you to unlink their wallet.",
|
|
10
|
+
"endpoints": {
|
|
11
|
+
"sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/payment/api/v1/mobile-tokens/delete",
|
|
12
|
+
"production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/payment/api/v1/mobile-tokens/delete"
|
|
13
|
+
},
|
|
14
|
+
"sameEndpointForBothEnvironments": true,
|
|
15
|
+
"movesMoney": false,
|
|
16
|
+
"responseContext": "token",
|
|
17
|
+
"constants": {},
|
|
18
|
+
"parameters": [
|
|
19
|
+
{
|
|
20
|
+
"name": "pp_RequestID",
|
|
21
|
+
"requirement": "mandatory",
|
|
22
|
+
"valueType": "request-id",
|
|
23
|
+
"notes": "Unique for every attempt.",
|
|
24
|
+
"maxLength": 20
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "pp_MerchantID",
|
|
28
|
+
"requirement": "mandatory",
|
|
29
|
+
"valueType": "string",
|
|
30
|
+
"notes": "From Integration > Credentials in the merchant portal."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "pp_Password",
|
|
34
|
+
"requirement": "mandatory",
|
|
35
|
+
"valueType": "string",
|
|
36
|
+
"notes": "From Integration > Credentials. Never render this into client-side code.",
|
|
37
|
+
"sensitive": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "pp_PaymentToken",
|
|
41
|
+
"requirement": "mandatory",
|
|
42
|
+
"valueType": "payment-token",
|
|
43
|
+
"notes": "The token to delete.",
|
|
44
|
+
"sensitive": true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "pp_SecureHash",
|
|
48
|
+
"requirement": "mandatory",
|
|
49
|
+
"valueType": "secure-hash",
|
|
50
|
+
"notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"hash": {
|
|
54
|
+
"algorithm": "hmac-sha256",
|
|
55
|
+
"includeFieldPrefixes": ["pp_", "ppmpf_"],
|
|
56
|
+
"excludeFields": ["pp_SecureHash", "SecureHash"],
|
|
57
|
+
"outputEncoding": "hex-lowercase",
|
|
58
|
+
"comparison": "case-insensitive"
|
|
59
|
+
},
|
|
60
|
+
"response": {
|
|
61
|
+
"hashField": "pp_SecureHash",
|
|
62
|
+
"hashFieldPrefixes": [],
|
|
63
|
+
"successField": "pp_ResponseCode",
|
|
64
|
+
"successValue": "000",
|
|
65
|
+
"messageField": "pp_ResponseMessage",
|
|
66
|
+
"hashVerification": "assumed-all-non-empty",
|
|
67
|
+
"notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_PaymentToken"]
|
|
68
|
+
},
|
|
69
|
+
"companionFlows": [],
|
|
70
|
+
"docRefs": [
|
|
71
|
+
{
|
|
72
|
+
"docId": "mwallet-recurring",
|
|
73
|
+
"sectionId": "delete-token",
|
|
74
|
+
"label": "MWallet Recurring Payments (Linking & Payment), 2026"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"knownIssues": [
|
|
78
|
+
{
|
|
79
|
+
"id": "identical-sandbox-and-production-endpoint",
|
|
80
|
+
"summary": "Sandbox and production use the same URL",
|
|
81
|
+
"detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
|
|
82
|
+
"guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "token-inquiry-v1",
|
|
3
|
+
"title": "MWallet Token Inquiry",
|
|
4
|
+
"provider": "jazzcash",
|
|
5
|
+
"product": "token",
|
|
6
|
+
"version": "1.0",
|
|
7
|
+
"transport": "rest",
|
|
8
|
+
"summary": "Retrieve the payment token currently associated with a customer's mobile number.",
|
|
9
|
+
"useWhen": "You need to check whether a wallet is still linked before attempting a token payment.",
|
|
10
|
+
"endpoints": {
|
|
11
|
+
"sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/payment/api/v1/mobile-tokens/inquiry",
|
|
12
|
+
"production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/payment/api/v1/mobile-tokens/inquiry"
|
|
13
|
+
},
|
|
14
|
+
"sameEndpointForBothEnvironments": true,
|
|
15
|
+
"movesMoney": false,
|
|
16
|
+
"responseContext": "token",
|
|
17
|
+
"constants": {},
|
|
18
|
+
"parameters": [
|
|
19
|
+
{
|
|
20
|
+
"name": "pp_RequestID",
|
|
21
|
+
"requirement": "mandatory",
|
|
22
|
+
"valueType": "request-id",
|
|
23
|
+
"notes": "Unique for every attempt.",
|
|
24
|
+
"maxLength": 20
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "pp_MobileNumber",
|
|
28
|
+
"requirement": "mandatory",
|
|
29
|
+
"valueType": "msisdn",
|
|
30
|
+
"notes": "The mobile number to query.",
|
|
31
|
+
"sensitive": true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "pp_MerchantID",
|
|
35
|
+
"requirement": "mandatory",
|
|
36
|
+
"valueType": "string",
|
|
37
|
+
"notes": "From Integration > Credentials in the merchant portal."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "pp_Password",
|
|
41
|
+
"requirement": "mandatory",
|
|
42
|
+
"valueType": "string",
|
|
43
|
+
"notes": "From Integration > Credentials. Never render this into client-side code.",
|
|
44
|
+
"sensitive": true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "pp_SecureHash",
|
|
48
|
+
"requirement": "mandatory",
|
|
49
|
+
"valueType": "secure-hash",
|
|
50
|
+
"notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"hash": {
|
|
54
|
+
"algorithm": "hmac-sha256",
|
|
55
|
+
"includeFieldPrefixes": ["pp_", "ppmpf_"],
|
|
56
|
+
"excludeFields": ["pp_SecureHash", "SecureHash"],
|
|
57
|
+
"outputEncoding": "hex-lowercase",
|
|
58
|
+
"comparison": "case-insensitive"
|
|
59
|
+
},
|
|
60
|
+
"response": {
|
|
61
|
+
"hashField": "pp_SecureHash",
|
|
62
|
+
"hashFieldPrefixes": [],
|
|
63
|
+
"successField": "pp_ResponseCode",
|
|
64
|
+
"successValue": "000",
|
|
65
|
+
"messageField": "pp_ResponseMessage",
|
|
66
|
+
"hashVerification": "assumed-all-non-empty",
|
|
67
|
+
"notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_PaymentToken"]
|
|
68
|
+
},
|
|
69
|
+
"companionFlows": ["mwallet-token-pay-v4.0"],
|
|
70
|
+
"docRefs": [
|
|
71
|
+
{
|
|
72
|
+
"docId": "mwallet-recurring",
|
|
73
|
+
"sectionId": "token-inquiry",
|
|
74
|
+
"label": "MWallet Recurring Payments (Linking & Payment), 2026"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"knownIssues": [
|
|
78
|
+
{
|
|
79
|
+
"id": "identical-sandbox-and-production-endpoint",
|
|
80
|
+
"summary": "Sandbox and production use the same URL",
|
|
81
|
+
"detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
|
|
82
|
+
"guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "wallet-linking-portal",
|
|
3
|
+
"title": "MWallet Linking via Portal",
|
|
4
|
+
"provider": "jazzcash",
|
|
5
|
+
"product": "wallet-linking",
|
|
6
|
+
"version": "1.0",
|
|
7
|
+
"transport": "form-post",
|
|
8
|
+
"summary": "Signed form post that sends the customer to JazzCash to authorise wallet linking with their MPIN. Returns a payment token for later use.",
|
|
9
|
+
"useWhen": "You need a reusable payment token for recurring charges.",
|
|
10
|
+
"endpoints": {
|
|
11
|
+
"sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/WalletLinkingPortal/wallet/LinkWallet",
|
|
12
|
+
"production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/WalletLinkingPortal/wallet/LinkWallet"
|
|
13
|
+
},
|
|
14
|
+
"sameEndpointForBothEnvironments": true,
|
|
15
|
+
"movesMoney": true,
|
|
16
|
+
"responseContext": "token",
|
|
17
|
+
"constants": {},
|
|
18
|
+
"parameters": [
|
|
19
|
+
{
|
|
20
|
+
"name": "pp_MerchantID",
|
|
21
|
+
"requirement": "mandatory",
|
|
22
|
+
"valueType": "string",
|
|
23
|
+
"notes": "From Integration > Credentials in the merchant portal."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "pp_Password",
|
|
27
|
+
"requirement": "mandatory",
|
|
28
|
+
"valueType": "string",
|
|
29
|
+
"notes": "From Integration > Credentials. Never render this into client-side code.",
|
|
30
|
+
"sensitive": true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "pp_MSISDN",
|
|
34
|
+
"requirement": "mandatory",
|
|
35
|
+
"valueType": "msisdn",
|
|
36
|
+
"notes": "The mobile wallet number to link.",
|
|
37
|
+
"sensitive": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "pp_RequestID",
|
|
41
|
+
"requirement": "mandatory",
|
|
42
|
+
"valueType": "request-id",
|
|
43
|
+
"notes": "Unique for every linking attempt.",
|
|
44
|
+
"maxLength": 20
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "pp_ReturnURL",
|
|
48
|
+
"requirement": "mandatory",
|
|
49
|
+
"valueType": "url",
|
|
50
|
+
"notes": "Must exactly match the URL registered against the merchant profile. It is part of merchant authentication; any difference fails validation."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "pp_SecureHash",
|
|
54
|
+
"requirement": "mandatory",
|
|
55
|
+
"valueType": "secure-hash",
|
|
56
|
+
"notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"hash": {
|
|
60
|
+
"algorithm": "hmac-sha256",
|
|
61
|
+
"includeFieldPrefixes": ["pp_", "ppmpf_"],
|
|
62
|
+
"excludeFields": ["pp_SecureHash", "SecureHash"],
|
|
63
|
+
"outputEncoding": "hex-lowercase",
|
|
64
|
+
"comparison": "case-insensitive"
|
|
65
|
+
},
|
|
66
|
+
"response": {
|
|
67
|
+
"hashField": "pp_SecureHash",
|
|
68
|
+
"hashFieldPrefixes": [],
|
|
69
|
+
"successField": "pp_ResponseCode",
|
|
70
|
+
"successValue": "000",
|
|
71
|
+
"messageField": "pp_ResponseMessage",
|
|
72
|
+
"hashVerification": "assumed-all-non-empty",
|
|
73
|
+
"notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_PaymentToken"]
|
|
74
|
+
},
|
|
75
|
+
"companionFlows": ["token-inquiry-v1", "mwallet-token-pay-v4.0"],
|
|
76
|
+
"docRefs": [
|
|
77
|
+
{
|
|
78
|
+
"docId": "mwallet-recurring",
|
|
79
|
+
"sectionId": "wallet-linking-via-portal",
|
|
80
|
+
"label": "MWallet Recurring Payments (Linking & Payment), 2026"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"knownIssues": [
|
|
84
|
+
{
|
|
85
|
+
"id": "sample-form-action-host-mismatch",
|
|
86
|
+
"summary": "The sample HTML posts to a different host than the documented endpoint",
|
|
87
|
+
"detail": "The sample form action is https://pgw.jazzcash.com.pk/WalletLinkingPortal/wallet/LinkWallet, while the endpoint table and the screenshot in the same document give https://onlinepayments.jazzcash.com.pk/payment-orchestrator/WalletLinkingPortal/wallet/LinkWallet.",
|
|
88
|
+
"guidance": "Use the endpoint from the table. The sample's host is inconsistent with the rest of the guide."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "sample-exposes-integrity-salt-in-browser",
|
|
92
|
+
"summary": "The sample computes the hash in browser JavaScript with the Integrity Salt embedded in the page",
|
|
93
|
+
"detail": "The sample assigns `const INTEGRITY_SALT = \"Your Integrity Salt\"` in a <script> block and hashes client-side. The salt is the HMAC key: publishing it in page source lets anyone forge a valid pp_SecureHash for your merchant account.",
|
|
94
|
+
"guidance": "Never ship that sample. Compute pp_SecureHash on your server and render only the finished hash into the form."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "sample-hashes-only-pp-prefixed-fields",
|
|
98
|
+
"summary": "The sample selects hash fields by the pp_ prefix only",
|
|
99
|
+
"detail": "The JavaScript filters on `element.id.startsWith(\"pp_\")`, whereas the official PHP samples include any non-empty field, including ppmpf_*.",
|
|
100
|
+
"guidance": "This flow declares no ppmpf_ fields, so the two rules agree here. See assumption A1 for flows where they do not."
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|