@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.
Files changed (366) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +364 -0
  3. package/dist/builder/transaction-builder.d.ts +53 -0
  4. package/dist/builder/transaction-builder.d.ts.map +1 -0
  5. package/dist/builder/transaction-builder.js +159 -0
  6. package/dist/builder/transaction-builder.js.map +1 -0
  7. package/dist/catalogue/default-catalogue.d.ts +18 -0
  8. package/dist/catalogue/default-catalogue.d.ts.map +1 -0
  9. package/dist/catalogue/default-catalogue.js +21 -0
  10. package/dist/catalogue/default-catalogue.js.map +1 -0
  11. package/dist/catalogue/endpoints.d.ts +22 -0
  12. package/dist/catalogue/endpoints.d.ts.map +1 -0
  13. package/dist/catalogue/endpoints.js +24 -0
  14. package/dist/catalogue/endpoints.js.map +1 -0
  15. package/dist/catalogue/flows.d.ts +32 -0
  16. package/dist/catalogue/flows.d.ts.map +1 -0
  17. package/dist/catalogue/flows.js +64 -0
  18. package/dist/catalogue/flows.js.map +1 -0
  19. package/dist/catalogue/hash-options.d.ts +112 -0
  20. package/dist/catalogue/hash-options.d.ts.map +1 -0
  21. package/dist/catalogue/hash-options.js +151 -0
  22. package/dist/catalogue/hash-options.js.map +1 -0
  23. package/dist/catalogue/types.d.ts +279 -0
  24. package/dist/catalogue/types.d.ts.map +1 -0
  25. package/dist/catalogue/types.js +360 -0
  26. package/dist/catalogue/types.js.map +1 -0
  27. package/dist/codegen/generate.d.ts +14 -0
  28. package/dist/codegen/generate.d.ts.map +1 -0
  29. package/dist/codegen/generate.js +490 -0
  30. package/dist/codegen/generate.js.map +1 -0
  31. package/dist/codegen/languages/node.d.ts +3 -0
  32. package/dist/codegen/languages/node.d.ts.map +1 -0
  33. package/dist/codegen/languages/node.js +32 -0
  34. package/dist/codegen/languages/node.js.map +1 -0
  35. package/dist/codegen/languages/php.d.ts +3 -0
  36. package/dist/codegen/languages/php.d.ts.map +1 -0
  37. package/dist/codegen/languages/php.js +27 -0
  38. package/dist/codegen/languages/php.js.map +1 -0
  39. package/dist/codegen/languages/python.d.ts +3 -0
  40. package/dist/codegen/languages/python.d.ts.map +1 -0
  41. package/dist/codegen/languages/python.js +27 -0
  42. package/dist/codegen/languages/python.js.map +1 -0
  43. package/dist/codegen/renderer.d.ts +24 -0
  44. package/dist/codegen/renderer.d.ts.map +1 -0
  45. package/dist/codegen/renderer.js +59 -0
  46. package/dist/codegen/renderer.js.map +1 -0
  47. package/dist/codegen/types.d.ts +50 -0
  48. package/dist/codegen/types.d.ts.map +1 -0
  49. package/dist/codegen/types.js +5 -0
  50. package/dist/codegen/types.js.map +1 -0
  51. package/dist/config/credentials.d.ts +64 -0
  52. package/dist/config/credentials.d.ts.map +1 -0
  53. package/dist/config/credentials.js +216 -0
  54. package/dist/config/credentials.js.map +1 -0
  55. package/dist/config/environment.d.ts +23 -0
  56. package/dist/config/environment.d.ts.map +1 -0
  57. package/dist/config/environment.js +54 -0
  58. package/dist/config/environment.js.map +1 -0
  59. package/dist/core/dependencies.d.ts +43 -0
  60. package/dist/core/dependencies.d.ts.map +1 -0
  61. package/dist/core/dependencies.js +2 -0
  62. package/dist/core/dependencies.js.map +1 -0
  63. package/dist/core/registry.d.ts +33 -0
  64. package/dist/core/registry.d.ts.map +1 -0
  65. package/dist/core/registry.js +13 -0
  66. package/dist/core/registry.js.map +1 -0
  67. package/dist/core/server.d.ts +61 -0
  68. package/dist/core/server.d.ts.map +1 -0
  69. package/dist/core/server.js +90 -0
  70. package/dist/core/server.js.map +1 -0
  71. package/dist/dependencies.d.ts +28 -0
  72. package/dist/dependencies.d.ts.map +1 -0
  73. package/dist/dependencies.js +2 -0
  74. package/dist/dependencies.js.map +1 -0
  75. package/dist/diagnostics/diagnose.d.ts +43 -0
  76. package/dist/diagnostics/diagnose.d.ts.map +1 -0
  77. package/dist/diagnostics/diagnose.js +121 -0
  78. package/dist/diagnostics/diagnose.js.map +1 -0
  79. package/dist/domain/amount.d.ts +157 -0
  80. package/dist/domain/amount.d.ts.map +1 -0
  81. package/dist/domain/amount.js +275 -0
  82. package/dist/domain/amount.js.map +1 -0
  83. package/dist/domain/datetime.d.ts +95 -0
  84. package/dist/domain/datetime.d.ts.map +1 -0
  85. package/dist/domain/datetime.js +211 -0
  86. package/dist/domain/datetime.js.map +1 -0
  87. package/dist/domain/response-codes.d.ts +116 -0
  88. package/dist/domain/response-codes.d.ts.map +1 -0
  89. package/dist/domain/response-codes.js +380 -0
  90. package/dist/domain/response-codes.js.map +1 -0
  91. package/dist/domain/secure-hash.d.ts +78 -0
  92. package/dist/domain/secure-hash.d.ts.map +1 -0
  93. package/dist/domain/secure-hash.js +69 -0
  94. package/dist/domain/secure-hash.js.map +1 -0
  95. package/dist/domain/signature/jazzcash.d.ts +56 -0
  96. package/dist/domain/signature/jazzcash.d.ts.map +1 -0
  97. package/dist/domain/signature/jazzcash.js +214 -0
  98. package/dist/domain/signature/jazzcash.js.map +1 -0
  99. package/dist/domain/signature/registry.d.ts +69 -0
  100. package/dist/domain/signature/registry.d.ts.map +1 -0
  101. package/dist/domain/signature/registry.js +92 -0
  102. package/dist/domain/signature/registry.js.map +1 -0
  103. package/dist/domain/signature/scheme.d.ts +349 -0
  104. package/dist/domain/signature/scheme.d.ts.map +1 -0
  105. package/dist/domain/signature/scheme.js +398 -0
  106. package/dist/domain/signature/scheme.js.map +1 -0
  107. package/dist/domain/txn-ref.d.ts +76 -0
  108. package/dist/domain/txn-ref.d.ts.map +1 -0
  109. package/dist/domain/txn-ref.js +126 -0
  110. package/dist/domain/txn-ref.js.map +1 -0
  111. package/dist/domain/types.d.ts +45 -0
  112. package/dist/domain/types.d.ts.map +1 -0
  113. package/dist/domain/types.js +70 -0
  114. package/dist/domain/types.js.map +1 -0
  115. package/dist/errors.d.ts +84 -0
  116. package/dist/errors.d.ts.map +1 -0
  117. package/dist/errors.js +87 -0
  118. package/dist/errors.js.map +1 -0
  119. package/dist/gateway/checkout-form.d.ts +16 -0
  120. package/dist/gateway/checkout-form.d.ts.map +1 -0
  121. package/dist/gateway/checkout-form.js +103 -0
  122. package/dist/gateway/checkout-form.js.map +1 -0
  123. package/dist/gateway/checkout-output.d.ts +70 -0
  124. package/dist/gateway/checkout-output.d.ts.map +1 -0
  125. package/dist/gateway/checkout-output.js +199 -0
  126. package/dist/gateway/checkout-output.js.map +1 -0
  127. package/dist/gateway/guards.d.ts +37 -0
  128. package/dist/gateway/guards.d.ts.map +1 -0
  129. package/dist/gateway/guards.js +44 -0
  130. package/dist/gateway/guards.js.map +1 -0
  131. package/dist/gateway/http-client.d.ts +42 -0
  132. package/dist/gateway/http-client.d.ts.map +1 -0
  133. package/dist/gateway/http-client.js +153 -0
  134. package/dist/gateway/http-client.js.map +1 -0
  135. package/dist/gateway/rest-client.d.ts +42 -0
  136. package/dist/gateway/rest-client.d.ts.map +1 -0
  137. package/dist/gateway/rest-client.js +241 -0
  138. package/dist/gateway/rest-client.js.map +1 -0
  139. package/dist/gateway/transport.d.ts +31 -0
  140. package/dist/gateway/transport.d.ts.map +1 -0
  141. package/dist/gateway/transport.js +73 -0
  142. package/dist/gateway/transport.js.map +1 -0
  143. package/dist/index.d.ts +3 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +75 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/install/cli.d.ts +38 -0
  148. package/dist/install/cli.d.ts.map +1 -0
  149. package/dist/install/cli.js +274 -0
  150. package/dist/install/cli.js.map +1 -0
  151. package/dist/install/harnesses.d.ts +74 -0
  152. package/dist/install/harnesses.d.ts.map +1 -0
  153. package/dist/install/harnesses.js +263 -0
  154. package/dist/install/harnesses.js.map +1 -0
  155. package/dist/knowledge/corpus.d.ts +15 -0
  156. package/dist/knowledge/corpus.d.ts.map +1 -0
  157. package/dist/knowledge/corpus.js +129 -0
  158. package/dist/knowledge/corpus.js.map +1 -0
  159. package/dist/knowledge/search.d.ts +29 -0
  160. package/dist/knowledge/search.d.ts.map +1 -0
  161. package/dist/knowledge/search.js +181 -0
  162. package/dist/knowledge/search.js.map +1 -0
  163. package/dist/knowledge/source.d.ts +60 -0
  164. package/dist/knowledge/source.d.ts.map +1 -0
  165. package/dist/knowledge/source.js +91 -0
  166. package/dist/knowledge/source.js.map +1 -0
  167. package/dist/knowledge/types.d.ts +40 -0
  168. package/dist/knowledge/types.d.ts.map +1 -0
  169. package/dist/knowledge/types.js +19 -0
  170. package/dist/knowledge/types.js.map +1 -0
  171. package/dist/paths.d.ts +26 -0
  172. package/dist/paths.d.ts.map +1 -0
  173. package/dist/paths.js +106 -0
  174. package/dist/paths.js.map +1 -0
  175. package/dist/prompts/integration-walkthrough.d.ts +11 -0
  176. package/dist/prompts/integration-walkthrough.d.ts.map +1 -0
  177. package/dist/prompts/integration-walkthrough.js +52 -0
  178. package/dist/prompts/integration-walkthrough.js.map +1 -0
  179. package/dist/prompts/register.d.ts +4 -0
  180. package/dist/prompts/register.d.ts.map +1 -0
  181. package/dist/prompts/register.js +4 -0
  182. package/dist/prompts/register.js.map +1 -0
  183. package/dist/registry.d.ts +14 -0
  184. package/dist/registry.d.ts.map +1 -0
  185. package/dist/registry.js +2 -0
  186. package/dist/registry.js.map +1 -0
  187. package/dist/resources/knowledge-resources.d.ts +5 -0
  188. package/dist/resources/knowledge-resources.d.ts.map +1 -0
  189. package/dist/resources/knowledge-resources.js +121 -0
  190. package/dist/resources/knowledge-resources.js.map +1 -0
  191. package/dist/resources/register.d.ts +4 -0
  192. package/dist/resources/register.d.ts.map +1 -0
  193. package/dist/resources/register.js +8 -0
  194. package/dist/resources/register.js.map +1 -0
  195. package/dist/server.d.ts +40 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +56 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/telemetry/logger.d.ts +31 -0
  200. package/dist/telemetry/logger.d.ts.map +1 -0
  201. package/dist/telemetry/logger.js +67 -0
  202. package/dist/telemetry/logger.js.map +1 -0
  203. package/dist/telemetry/redaction.d.ts +88 -0
  204. package/dist/telemetry/redaction.d.ts.map +1 -0
  205. package/dist/telemetry/redaction.js +238 -0
  206. package/dist/telemetry/redaction.js.map +1 -0
  207. package/dist/tools/build-transaction-parameters.d.ts +10 -0
  208. package/dist/tools/build-transaction-parameters.d.ts.map +1 -0
  209. package/dist/tools/build-transaction-parameters.js +154 -0
  210. package/dist/tools/build-transaction-parameters.js.map +1 -0
  211. package/dist/tools/call-context.d.ts +47 -0
  212. package/dist/tools/call-context.d.ts.map +1 -0
  213. package/dist/tools/call-context.js +15 -0
  214. package/dist/tools/call-context.js.map +1 -0
  215. package/dist/tools/codegen-tools.d.ts +4 -0
  216. package/dist/tools/codegen-tools.d.ts.map +1 -0
  217. package/dist/tools/codegen-tools.js +131 -0
  218. package/dist/tools/codegen-tools.js.map +1 -0
  219. package/dist/tools/credential-tools.d.ts +32 -0
  220. package/dist/tools/credential-tools.d.ts.map +1 -0
  221. package/dist/tools/credential-tools.js +65 -0
  222. package/dist/tools/credential-tools.js.map +1 -0
  223. package/dist/tools/descriptor.d.ts +52 -0
  224. package/dist/tools/descriptor.d.ts.map +1 -0
  225. package/dist/tools/descriptor.js +2 -0
  226. package/dist/tools/descriptor.js.map +1 -0
  227. package/dist/tools/diagnostic-tools.d.ts +3 -0
  228. package/dist/tools/diagnostic-tools.d.ts.map +1 -0
  229. package/dist/tools/diagnostic-tools.js +128 -0
  230. package/dist/tools/diagnostic-tools.js.map +1 -0
  231. package/dist/tools/gateway-tools.d.ts +6 -0
  232. package/dist/tools/gateway-tools.d.ts.map +1 -0
  233. package/dist/tools/gateway-tools.js +381 -0
  234. package/dist/tools/gateway-tools.js.map +1 -0
  235. package/dist/tools/hash-tools.d.ts +5 -0
  236. package/dist/tools/hash-tools.d.ts.map +1 -0
  237. package/dist/tools/hash-tools.js +238 -0
  238. package/dist/tools/hash-tools.js.map +1 -0
  239. package/dist/tools/knowledge-tools.d.ts +7 -0
  240. package/dist/tools/knowledge-tools.d.ts.map +1 -0
  241. package/dist/tools/knowledge-tools.js +247 -0
  242. package/dist/tools/knowledge-tools.js.map +1 -0
  243. package/dist/tools/onboarding-checklist.d.ts +3 -0
  244. package/dist/tools/onboarding-checklist.d.ts.map +1 -0
  245. package/dist/tools/onboarding-checklist.js +141 -0
  246. package/dist/tools/onboarding-checklist.js.map +1 -0
  247. package/dist/tools/register.d.ts +60 -0
  248. package/dist/tools/register.d.ts.map +1 -0
  249. package/dist/tools/register.js +145 -0
  250. package/dist/tools/register.js.map +1 -0
  251. package/dist/tools/tool-kit.d.ts +88 -0
  252. package/dist/tools/tool-kit.d.ts.map +1 -0
  253. package/dist/tools/tool-kit.js +297 -0
  254. package/dist/tools/tool-kit.js.map +1 -0
  255. package/dist/validation/payload-validator.d.ts +29 -0
  256. package/dist/validation/payload-validator.d.ts.map +1 -0
  257. package/dist/validation/payload-validator.js +79 -0
  258. package/dist/validation/payload-validator.js.map +1 -0
  259. package/dist/validation/rules/amount.d.ts +3 -0
  260. package/dist/validation/rules/amount.d.ts.map +1 -0
  261. package/dist/validation/rules/amount.js +77 -0
  262. package/dist/validation/rules/amount.js.map +1 -0
  263. package/dist/validation/rules/bill-reference.d.ts +10 -0
  264. package/dist/validation/rules/bill-reference.d.ts.map +1 -0
  265. package/dist/validation/rules/bill-reference.js +34 -0
  266. package/dist/validation/rules/bill-reference.js.map +1 -0
  267. package/dist/validation/rules/cnic.d.ts +3 -0
  268. package/dist/validation/rules/cnic.d.ts.map +1 -0
  269. package/dist/validation/rules/cnic.js +42 -0
  270. package/dist/validation/rules/cnic.js.map +1 -0
  271. package/dist/validation/rules/constants.d.ts +9 -0
  272. package/dist/validation/rules/constants.d.ts.map +1 -0
  273. package/dist/validation/rules/constants.js +28 -0
  274. package/dist/validation/rules/constants.js.map +1 -0
  275. package/dist/validation/rules/constraints.d.ts +3 -0
  276. package/dist/validation/rules/constraints.d.ts.map +1 -0
  277. package/dist/validation/rules/constraints.js +113 -0
  278. package/dist/validation/rules/constraints.js.map +1 -0
  279. package/dist/validation/rules/datetime.d.ts +3 -0
  280. package/dist/validation/rules/datetime.d.ts.map +1 -0
  281. package/dist/validation/rules/datetime.js +49 -0
  282. package/dist/validation/rules/datetime.js.map +1 -0
  283. package/dist/validation/rules/empty-string.d.ts +13 -0
  284. package/dist/validation/rules/empty-string.d.ts.map +1 -0
  285. package/dist/validation/rules/empty-string.js +32 -0
  286. package/dist/validation/rules/empty-string.js.map +1 -0
  287. package/dist/validation/rules/expiry.d.ts +3 -0
  288. package/dist/validation/rules/expiry.d.ts.map +1 -0
  289. package/dist/validation/rules/expiry.js +52 -0
  290. package/dist/validation/rules/expiry.js.map +1 -0
  291. package/dist/validation/rules/msisdn.d.ts +3 -0
  292. package/dist/validation/rules/msisdn.d.ts.map +1 -0
  293. package/dist/validation/rules/msisdn.js +45 -0
  294. package/dist/validation/rules/msisdn.js.map +1 -0
  295. package/dist/validation/rules/presence.d.ts +3 -0
  296. package/dist/validation/rules/presence.d.ts.map +1 -0
  297. package/dist/validation/rules/presence.js +90 -0
  298. package/dist/validation/rules/presence.js.map +1 -0
  299. package/dist/validation/rules/return-url.d.ts +14 -0
  300. package/dist/validation/rules/return-url.d.ts.map +1 -0
  301. package/dist/validation/rules/return-url.js +58 -0
  302. package/dist/validation/rules/return-url.js.map +1 -0
  303. package/dist/validation/rules/tool-argument.d.ts +16 -0
  304. package/dist/validation/rules/tool-argument.d.ts.map +1 -0
  305. package/dist/validation/rules/tool-argument.js +38 -0
  306. package/dist/validation/rules/tool-argument.js.map +1 -0
  307. package/dist/validation/rules/txn-ref.d.ts +3 -0
  308. package/dist/validation/rules/txn-ref.d.ts.map +1 -0
  309. package/dist/validation/rules/txn-ref.js +47 -0
  310. package/dist/validation/rules/txn-ref.js.map +1 -0
  311. package/dist/validation/rules/unknown-fields.d.ts +10 -0
  312. package/dist/validation/rules/unknown-fields.d.ts.map +1 -0
  313. package/dist/validation/rules/unknown-fields.js +29 -0
  314. package/dist/validation/rules/unknown-fields.js.map +1 -0
  315. package/dist/validation/types.d.ts +36 -0
  316. package/dist/validation/types.d.ts.map +1 -0
  317. package/dist/validation/types.js +12 -0
  318. package/dist/validation/types.js.map +1 -0
  319. package/dist/version.d.ts +23 -0
  320. package/dist/version.d.ts.map +1 -0
  321. package/dist/version.js +23 -0
  322. package/dist/version.js.map +1 -0
  323. package/knowledge/diagnostics/symptoms.json +321 -0
  324. package/knowledge/docs/bnpl-guide.md +77 -0
  325. package/knowledge/docs/card-page-redirection.md +67 -0
  326. package/knowledge/docs/card-refund.md +91 -0
  327. package/knowledge/docs/hmac-sha256-calculation.md +72 -0
  328. package/knowledge/docs/index.json +189 -0
  329. package/knowledge/docs/ipn-implementation.md +89 -0
  330. package/knowledge/docs/mwallet-recurring.md +117 -0
  331. package/knowledge/docs/mwallet-refund.md +65 -0
  332. package/knowledge/docs/mwallet-rest-v1-1.md +126 -0
  333. package/knowledge/docs/mwallet-rest-v2-0-cnic.md +113 -0
  334. package/knowledge/docs/portal-guide.md +45 -0
  335. package/knowledge/docs/shopify-guide.md +74 -0
  336. package/knowledge/docs/status-inquiry-2025-26.md +32 -0
  337. package/knowledge/docs/status-inquiry.md +111 -0
  338. package/knowledge/docs/wordpress-guide.md +49 -0
  339. package/knowledge/flow.schema.json +390 -0
  340. package/knowledge/flows/bnpl-page-redirection-v1.1.json +211 -0
  341. package/knowledge/flows/card-page-redirection-v1.1.json +211 -0
  342. package/knowledge/flows/mwallet-rest-v1.1.json +187 -0
  343. package/knowledge/flows/mwallet-rest-v2.0-cnic.json +197 -0
  344. package/knowledge/flows/mwallet-token-pay-v4.0.json +130 -0
  345. package/knowledge/flows/refund-bnpl.json +105 -0
  346. package/knowledge/flows/refund-card-v1.1.json +112 -0
  347. package/knowledge/flows/refund-card-v2.0.json +121 -0
  348. package/knowledge/flows/refund-mwallet-v1.1.json +106 -0
  349. package/knowledge/flows/status-inquiry-v1.1.json +102 -0
  350. package/knowledge/flows/status-inquiry-v2.0.json +103 -0
  351. package/knowledge/flows/token-delete-v1.json +85 -0
  352. package/knowledge/flows/token-inquiry-v1.json +85 -0
  353. package/knowledge/flows/wallet-linking-portal.json +103 -0
  354. package/knowledge/templates/node/checkout-redirect.tmpl +166 -0
  355. package/knowledge/templates/node/ipn-handler.tmpl +108 -0
  356. package/knowledge/templates/node/rest-client.tmpl +197 -0
  357. package/knowledge/templates/node/wallet-linking.tmpl +147 -0
  358. package/knowledge/templates/php/checkout-redirect.tmpl +149 -0
  359. package/knowledge/templates/php/ipn-handler.tmpl +105 -0
  360. package/knowledge/templates/php/rest-client.tmpl +191 -0
  361. package/knowledge/templates/php/wallet-linking.tmpl +137 -0
  362. package/knowledge/templates/python/checkout-redirect.tmpl +148 -0
  363. package/knowledge/templates/python/ipn-handler.tmpl +110 -0
  364. package/knowledge/templates/python/rest-client.tmpl +179 -0
  365. package/knowledge/templates/python/wallet-linking.tmpl +133 -0
  366. package/package.json +84 -0
@@ -0,0 +1,117 @@
1
+ # MWallet Recurring Payments — Linking, Token Payment, Token Inquiry, Token Delete
2
+
3
+ Source: `MWallet Recurring Payments (2026).pdf`, version 2026.
4
+
5
+ ## Introduction {#introduction}
6
+
7
+ Recurring mobile-wallet payments in JazzCash are a two-step arrangement. The customer authorises a link once, through a hosted portal, which yields a **payment token**. The merchant then charges that token as often as needed, with no further customer interaction.
8
+
9
+ ## Wallet linking via portal {#wallet-linking-via-portal}
10
+
11
+ The merchant posts a signed form; the customer enters their MPIN on the JazzCash page; the result is returned to the merchant's Return URL.
12
+
13
+ Form action, identical for both environments:
14
+
15
+ ```
16
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/WalletLinkingPortal/wallet/LinkWallet
17
+ ```
18
+
19
+ Parameters: `pp_MerchantID`, `pp_Password`, `pp_MSISDN`, `pp_RequestID`, `pp_ReturnURL`, `pp_SecureHash`.
20
+
21
+ - `pp_RequestID` must be unique for every linking attempt.
22
+ - `pp_ReturnURL` must be pre-registered with JazzCash.
23
+
24
+ ## Shared rules {#shared-rules}
25
+
26
+ The same payload rules apply as for the MWallet REST APIs: string values in double quotes, unused parameters as `""` rather than `null`, no fields added or removed, constants unmodified, PKR only with amounts in minor units, `YYYYMMDDHHMMSS` timestamps in Pakistan Standard Time, and a freshly generated `pp_SecureHash` per attempt. Status Inquiry and IPN are mandatory; Refund is optional.
27
+
28
+ ## Two defects in the official sample {#sample-defects}
29
+
30
+ The guide's sample HTML page contains two problems that must not be carried into production.
31
+
32
+ 1. **The form action points at a different host.** The sample posts to `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`. Use the endpoint from the table.
33
+
34
+ 2. **The Integrity Salt is embedded in browser JavaScript.** The sample contains `const INTEGRITY_SALT = "Your Integrity Salt";` and computes the hash client-side with CryptoJS. The Integrity Salt is the HMAC key. Publishing it in page source lets anyone forge a valid `pp_SecureHash` for your merchant account. **Compute the hash on your server** and render only the finished hash into the form.
35
+
36
+ The sample also selects hash fields with `element.id.startsWith("pp_")`, whereas the official PHP samples include any non-empty field including `ppmpf_*`. This flow declares no `ppmpf_*` fields, so the two rules agree here.
37
+
38
+ ## MWallet Pay via Token {#mwallet-pay-via-token}
39
+
40
+ Endpoint, identical for both environments:
41
+
42
+ ```
43
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v4/rest/payments/m-wallet
44
+ ```
45
+
46
+ Sample request:
47
+
48
+ ```json
49
+ {
50
+ "pp_MerchantID": "{{Your Merchant ID}}",
51
+ "pp_Password": "{{Your Password}}",
52
+ "pp_PaymentToken": "{{Payment Token}}",
53
+ "pp_TxnRefNo": "T20251117153308",
54
+ "pp_Amount": "100",
55
+ "pp_TxnCurrency": "PKR",
56
+ "pp_TxnDateTime": "20251117153308",
57
+ "pp_BillReference": "B20251117153308",
58
+ "pp_Description": "MWALLET Payment v4.0",
59
+ "pp_TxnExpiryDateTime": "20250926003252",
60
+ "pp_SecureHash": "42D2324F1F3947A5F374A5886D09C15A1B6F567B5F110276AFD6E958304CD57A"
61
+ }
62
+ ```
63
+
64
+ > The sample's `pp_TxnExpiryDateTime` (`20250926003252`) is nearly two months **earlier** than its `pp_TxnDateTime` (`20251117153308`). Ignore the sample values and set the expiry one day after the transaction, as the shared rules require.
65
+
66
+ Sample response:
67
+
68
+ ```json
69
+ {
70
+ "pp_ResponseCode": "000",
71
+ "pp_ResponseMessage": "Thank you for using JazzCash. Your transaction was processed successfully.",
72
+ "pp_Amount": "100",
73
+ "pp_RetreivalReferenceNo": "202511171535408897538884",
74
+ "pp_TxnRefNo": "T20251117153308",
75
+ "pp_PaymentToken": "{{Payment Token}}",
76
+ "pp_DiscountedAmount": "",
77
+ "pp_SecureHash": "A632596C21414A1DB4B4AE799B976..."
78
+ }
79
+ ```
80
+
81
+ ## Token Inquiry {#token-inquiry}
82
+
83
+ Retrieves the payment token currently associated with a customer's mobile number.
84
+
85
+ ```
86
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/payment/api/v1/mobile-tokens/inquiry
87
+ ```
88
+
89
+ Request: `pp_RequestID`, `pp_MobileNumber`, `pp_MerchantID`, `pp_Password`, `pp_SecureHash`.
90
+
91
+ Response carries `pp_PaymentToken` alongside `pp_ResponseCode` `000` and the message "your payment token is active."
92
+
93
+ - `pp_RequestID` must be unique for every attempt.
94
+ - `pp_MobileNumber` is the number to query.
95
+
96
+ ## Delete Token {#delete-token}
97
+
98
+ Deletes an existing payment token, removing its association with the customer's account.
99
+
100
+ ```
101
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/payment/api/v1/mobile-tokens/delete
102
+ ```
103
+
104
+ Request: `pp_RequestID`, `pp_MerchantID`, `pp_Password`, `pp_PaymentToken`, `pp_SecureHash`.
105
+
106
+ - `pp_RequestID` must be unique for every attempt.
107
+ - `pp_PaymentToken` is the token to delete.
108
+
109
+ ## Common failures {#common-failures}
110
+
111
+ | Symptom | Cause | Fix |
112
+ | --- | --- | --- |
113
+ | Linking page not found | Sample's `pgw.jazzcash.com.pk` host used | Use the endpoint from the guide's table |
114
+ | Anyone can forge your hashes | Integrity Salt shipped to the browser | Compute the hash server-side |
115
+ | Duplicate request rejected | `pp_RequestID` reused | Generate a fresh unique value per attempt |
116
+ | Token payment rejected as expired | Expiry copied from the sample | Set the expiry one day after the transaction |
117
+ | Token payment fails after months of working | Customer unlinked the wallet | Call Token Inquiry before charging, and handle an inactive token |
@@ -0,0 +1,65 @@
1
+ # Mobile Wallet Refund API v1.1
2
+
3
+ Source: `Mobile Wallet Refund API (2026).pdf`, version 2026.
4
+
5
+ ## Introduction {#introduction}
6
+
7
+ Refunds a completed JazzCash mobile wallet transaction, in whole or in part. The Refund API is documented as **optional**, unlike Status Inquiry and IPN, which are mandatory.
8
+
9
+ The Merchant MPIN must be saved in the merchant portal before a refund will succeed.
10
+
11
+ ## Creating a sandbox account {#create-a-sandbox-account}
12
+
13
+ Sign up at <https://onlinepayments.jazzcash.com.pk/sandbox-frontend/>, share your Merchant ID with JazzCash, and take your credentials from **Integration → Credentials**, where you also register your Return URL and IPN URL.
14
+
15
+ ## Endpoint {#api-endpoints}
16
+
17
+ Identical for both environments:
18
+
19
+ ```
20
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/m-wallet/refund
21
+ ```
22
+
23
+ ## Sample request {#sample-request}
24
+
25
+ ```json
26
+ {
27
+ "pp_MerchantID": "YOUR MERCHANT ID",
28
+ "pp_Password": "YOUR PASSWORD",
29
+ "pp_TxnRefNo": "T20251224191536",
30
+ "pp_Amount": "100",
31
+ "pp_SecureHash": "928c8fdffd052ef0b940d6bd8661e1c9b78afe3ad17ebdc074a48f36738e2603",
32
+ "pp_TxnCurrency": "PKR",
33
+ "pp_MerchantMPIN": "YOUR MERCHANT MPIN"
34
+ }
35
+ ```
36
+
37
+ `pp_TxnRefNo` is the reference of the **original transaction** being refunded, not a new one.
38
+
39
+ ## Sample response {#sample-response}
40
+
41
+ ```json
42
+ {
43
+ "pp_ResponseCode": "000",
44
+ "pp_ResponseMessage": "Thank you for using JazzCash. Your transaction was processed successfully.",
45
+ "pp_RefundAmount": "100",
46
+ "pp_TotalRefundAmount": "100",
47
+ "pp_SecureHash": "20B6593DFC995F98A54EC1B397C150085A2CC53DDC6751B72C6B4E927977CB35"
48
+ }
49
+ ```
50
+
51
+ Unlike the card and BNPL refund responses, the mobile wallet refund response **does** use the `pp_` prefix throughout.
52
+
53
+ ## Partial refunds {#partial-refunds}
54
+
55
+ `pp_RefundAmount` is the amount refunded by this call. `pp_TotalRefundAmount` is the cumulative total refunded against the original transaction. Track the cumulative figure so repeated partial refunds cannot exceed the original amount.
56
+
57
+ ## Common failures {#common-failures}
58
+
59
+ | Symptom | Cause | Fix |
60
+ | --- | --- | --- |
61
+ | Refund rejected | MPIN not saved in the merchant portal | Save it in the portal, then retry |
62
+ | Transaction not found | A newly generated `pp_TxnRefNo` sent | Send the original transaction's reference |
63
+ | Refund rejected as too large | Cumulative refunds exceed the original | Check `pp_TotalRefundAmount` before refunding again |
64
+ | Amount off by 100× | Refund amount in major units | `pp_Amount` is in minor units |
65
+ | Field not found | Card refund field names assumed | Mobile wallet refunds use `pp_`-prefixed fields |
@@ -0,0 +1,126 @@
1
+ # MWallet REST API v1.1 (without CNIC)
2
+
3
+ Source: `MWallet API v1.1 (Without CNIC)_Merchant Guide_(2026).pdf`, version 2026.
4
+
5
+ ## Introduction {#introduction}
6
+
7
+ Server-to-server debit of a JazzCash mobile account, without CNIC verification. There is no hosted page: your server posts JSON, and the customer approves the transaction on their handset.
8
+
9
+ ## Creating a sandbox account {#create-a-sandbox-account}
10
+
11
+ 1. Sign up at <https://onlinepayments.jazzcash.com.pk/sandbox-frontend/> and share your Merchant ID with JazzCash so the payment option can be enabled.
12
+ 2. In **Integration → Credentials**, record the Merchant ID, Password and Integrity Salt, and enter your Return URL and IPN URL.
13
+
14
+ ## Endpoint {#endpoint}
15
+
16
+ Identical for both environments:
17
+
18
+ ```
19
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/m-wallet
20
+ ```
21
+
22
+ ## Implementation notes {#implementation-notes}
23
+
24
+ The sections below are the rules JazzCash states for this flow. They are the ones merchants most often break, and each maps directly to a validation check the MCP server performs.
25
+
26
+ ## Request payload rules {#request-payload-rules}
27
+
28
+ - All parameter values must be passed as strings, enclosed in double quotes.
29
+ - Parameters with no value must remain as empty strings `""`. **Do not replace them with `null` and do not remove them from the request.**
30
+ - Parameter names must not be changed and must exactly match the documentation.
31
+ - No parameters may be added or removed from the request payload.
32
+ - Mandatory constant parameters — `pp_Language`, `pp_TxnCurrency`, `pp_TxnType`, `pp_Version` — must not be modified.
33
+
34
+ ## Mandatory companion integrations {#mandatory-api-integrations}
35
+
36
+ - **Status Inquiry API — mandatory.**
37
+ - **IPN (Instant Payment Notification) — mandatory.**
38
+ - Refund API — optional.
39
+
40
+ ## Currency and amount handling {#currency-and-amount-handling}
41
+
42
+ - The gateway processes transactions only in PKR. No currency conversion is performed.
43
+ - `pp_Amount` must be multiplied by 100 before sending: 100.00 is sent as `"10000"`.
44
+ - The last two digits are treated as decimals.
45
+ - When processing the response, divide by 100 to obtain the actual value.
46
+
47
+ ## Transaction references {#transaction-reference-requirements}
48
+
49
+ - `pp_TxnRefNo` must be unique for every transaction. Recommended format: the first three letters of the merchant's domain name followed by the transaction date and time, e.g. `Goo20230208115409`. The sample annotates the field as 20 alphanumeric characters.
50
+ - `pp_BillReference` is mandatory, may be duplicated across transactions, and must contain only `A–Z`, `a–z` and `0–9`. Spaces and special characters are not allowed.
51
+
52
+ ## Date and time {#date-and-time-parameters}
53
+
54
+ All values are in Pakistan Standard Time.
55
+
56
+ - `pp_TxnDateTime` — current transaction date and time, `YYYYMMDDHHMMSS`.
57
+ - `pp_TxnExpiryDateTime` — one day after the transaction date, `YYYYMMDDHHMMSS`.
58
+
59
+ ## Return URL {#return-url-configuration}
60
+
61
+ `pp_ReturnURL` is mandatory. It must be pre-registered with JazzCash and is part of the merchant authentication profile. The same URL must be used for every request; any change results in request validation failure.
62
+
63
+ ## Secure hash {#secure-hash-generation}
64
+
65
+ A unique `pp_SecureHash` must be generated for every transaction, for both request submission and response verification, strictly per the JazzCash hashing guidelines.
66
+
67
+ ## Sample request {#sample-request}
68
+
69
+ ```json
70
+ {
71
+ "pp_Amount": "200",
72
+ "pp_BillReference": "B20251120115142",
73
+ "pp_Description": "Test case description",
74
+ "pp_Language": "EN",
75
+ "pp_MerchantID": "[Your Merchant ID]",
76
+ "pp_Password": "[Your Password]",
77
+ "pp_ReturnURL": "[your return URL]",
78
+ "pp_SecureHash": "DE2665AA0C04B6E53996CA0D7FEC355D2F4CCEEA04D6EEBC3AAD5DA0A262AA97",
79
+ "pp_TxnCurrency": "PKR",
80
+ "pp_TxnDateTime": "20251120115142",
81
+ "pp_TxnExpiryDateTime": "20251121115142",
82
+ "pp_TxnRefNo": "T20251120115142",
83
+ "pp_TxnType": "MWALLET",
84
+ "pp_Version": "1.1",
85
+ "ppmpf_1": "[Mobile Wallet Number]",
86
+ "ppmpf_2": "",
87
+ "ppmpf_3": "",
88
+ "ppmpf_4": "",
89
+ "ppmpf_5": ""
90
+ }
91
+ ```
92
+
93
+ `ppmpf_1` carries the customer's mobile wallet number and is **mandatory in this flow only**. Every other guide instructs you to leave it empty. Because it is non-empty it also participates in the secure hash.
94
+
95
+ ## Sample response {#sample-response}
96
+
97
+ ```json
98
+ {
99
+ "pp_Amount": "200",
100
+ "pp_BillReference": "B20251120115142",
101
+ "pp_Language": "EN",
102
+ "pp_MerchantID": "XXXXXX",
103
+ "pp_ResponseCode": "000",
104
+ "pp_ResponseMessage": "Thank you for Using JazzCash, your transaction was successful.",
105
+ "pp_RetreivalReferenceNo": "202511201152000464544243",
106
+ "pp_SecureHash": "78BC9B7231A569C4AB8C4E8ED36D2CA76379D095E629C2EC915BF1357BB4DF7F",
107
+ "pp_TxnCurrency": "PKR",
108
+ "pp_TxnDateTime": "20251120115142",
109
+ "pp_TxnRefNo": "T20251120115142",
110
+ "pp_TxnType": "MWALLET",
111
+ "pp_Version": "1.1",
112
+ "ppmpf_1": "03123456789"
113
+ }
114
+ ```
115
+
116
+ `pp_RetreivalReferenceNo` is spelled with that transposition in the gateway's own response. Match the gateway's spelling when reading it.
117
+
118
+ ## Common failures {#common-failures}
119
+
120
+ | Symptom | Cause | Fix |
121
+ | --- | --- | --- |
122
+ | Hash mismatch | `ppmpf_1` populated but excluded from the hash | Non-empty `ppmpf_*` fields participate in the hash |
123
+ | Request rejected | A field sent as `null` | Send `""` instead |
124
+ | Request rejected | An extra field added to the payload | Send exactly the documented field set |
125
+ | Customer charged 100× too little | `pp_Amount` sent in major units | Multiply by 100 |
126
+ | Validation failure | `pp_ReturnURL` differs from the registered value | Send the registered URL exactly |
@@ -0,0 +1,113 @@
1
+ # MWallet REST API v2.0 (with CNIC)
2
+
3
+ Source: `MWallet API V.2.0 (With CNIC)_Merchant Guide_(2026).pdf`, version 2026.
4
+
5
+ ## Introduction {#introduction}
6
+
7
+ Server-to-server debit of a JazzCash mobile account with CNIC verification. Structurally similar to v1.1, but the customer's mobile number and CNIC fragment are first-class parameters rather than being carried in `ppmpf_1`.
8
+
9
+ ## Creating a sandbox account {#create-a-sandbox-account}
10
+
11
+ Sign up at <https://onlinepayments.jazzcash.com.pk/sandbox-frontend/>, share your Merchant ID with JazzCash to have the option enabled, then take your credentials and register your Return URL and IPN URL under **Integration → Credentials**.
12
+
13
+ ## Endpoint {#endpoint}
14
+
15
+ Identical for both environments:
16
+
17
+ ```
18
+ https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v2/rest/payments/m-wallet
19
+ ```
20
+
21
+ ## Implementation notes {#implementation-notes}
22
+
23
+ The sections below are the rules JazzCash states for this flow. They are the ones merchants most often break, and each maps directly to a validation check the MCP server performs.
24
+
25
+ ## Request payload rules {#request-payload-rules}
26
+
27
+ - All values are strings in double quotes.
28
+ - Unused parameters remain `""` — never `null`, never omitted.
29
+ - Parameter names must match the documentation exactly.
30
+ - No parameters may be added or removed.
31
+ - The constants `pp_Language`, `pp_TxnCurrency`, `pp_TxnType` and `pp_Version` must not be modified.
32
+
33
+ ## Mandatory companion integrations {#mandatory-api-integrations}
34
+
35
+ - **Status Inquiry API — mandatory.**
36
+ - **IPN — mandatory.**
37
+ - Refund API — optional.
38
+
39
+ ## Currency and amount handling {#currency-and-amount-handling}
40
+
41
+ PKR only, no conversion. `pp_Amount` is multiplied by 100 before sending; the last two digits are decimals; divide by 100 when reading a response.
42
+
43
+ ## Transaction references {#transaction-reference-requirements}
44
+
45
+ `pp_TxnRefNo` unique per transaction, recommended as a three-letter domain prefix plus `YmdHis`. `pp_BillReference` mandatory, alphanumeric only, may repeat.
46
+
47
+ ## Date and time {#date-and-time-parameters}
48
+
49
+ `pp_TxnDateTime` and `pp_TxnExpiryDateTime` are `YYYYMMDDHHMMSS` in Pakistan Standard Time, the expiry one day after the transaction.
50
+
51
+ ## Validation checklist {#general-validation-checklist}
52
+
53
+ Before sending, confirm that every mandatory parameter is present, every empty parameter is `""`, `pp_Amount` has been multiplied by 100, `pp_TxnRefNo` is unique, and `pp_SecureHash` has been freshly generated.
54
+
55
+ ## Sample request {#sample-request}
56
+
57
+ ```json
58
+ {
59
+ "pp_Amount": "100",
60
+ "pp_BankID": "",
61
+ "pp_BillReference": "billRef185",
62
+ "pp_CNIC": "{{Last 6-digits}}",
63
+ "pp_Description": "product description",
64
+ "pp_Language": "EN",
65
+ "pp_MerchantID": "{{MerchantID}}",
66
+ "pp_MobileNumber": "{{JazzcashMobileAccount}}",
67
+ "pp_Password": "{{Password}}",
68
+ "pp_ProductID": "",
69
+ "pp_SecureHash": "CD4DA5575F6CC08F9A0B78D414B91657FF0AACFDBE8FF691F8A1F80C6E0C0C4F",
70
+ "pp_SubMerchantID": "",
71
+ "pp_TxnCurrency": "PKR",
72
+ "pp_TxnDateTime": "20250908151702",
73
+ "pp_TxnExpiryDateTime": "20250910151702",
74
+ "pp_TxnRefNo": "T20250908151702",
75
+ "ppmpf_1": "",
76
+ "ppmpf_2": "",
77
+ "ppmpf_3": "",
78
+ "ppmpf_4": "",
79
+ "ppmpf_5": ""
80
+ }
81
+ ```
82
+
83
+ Two things about this sample are worth noting:
84
+
85
+ - **`pp_CNIC` is the last six digits of the CNIC**, not the whole number.
86
+ - **The request carries neither `pp_Version` nor `pp_TxnType`**, unlike v1.1. The response echoes both back as empty strings. Send exactly the documented field set: adding either would change the hash and break the "no parameters may be added" rule.
87
+ - The sample's expiry (`20250910151702`) is **two days** after its transaction time, contradicting the same document's "one day after" rule. Follow the rule, not the sample.
88
+
89
+ ## Sample response {#sample-response}
90
+
91
+ ```json
92
+ {
93
+ "pp_Amount": "100",
94
+ "pp_AuthCode": "088911015335",
95
+ "pp_BillReference": "billRef185",
96
+ "pp_ResponseCode": "000",
97
+ "pp_ResponseMessage": "Thank you for Using JazzCash, your transaction was successful.",
98
+ "pp_RetreivalReferenceNo": "202509081757326660695254",
99
+ "pp_SecureHash": "80609D35A17575E249E99D20AE83B9EA25BDAEAF3EB17FD19B7055502503E2B7",
100
+ "pp_TxnCurrency": "PKR",
101
+ "pp_TxnDateTime": "20250908151702",
102
+ "pp_TxnRefNo": "T20250908151702"
103
+ }
104
+ ```
105
+
106
+ ## Common failures {#common-failures}
107
+
108
+ | Symptom | Cause | Fix |
109
+ | --- | --- | --- |
110
+ | CNIC rejected | Full 13-digit CNIC sent | Send only the last six digits |
111
+ | Request rejected | `pp_Version` or `pp_TxnType` added by analogy with v1.1 | v2.0 does not declare them |
112
+ | Hash mismatch | Empty `ppmpf_*` fields included in the hash string | Send them as `""` but exclude them from the hash |
113
+ | Wallet not found | Mobile number in international format | Use the local `03XXXXXXXXX` form |
@@ -0,0 +1,45 @@
1
+ # JazzCash Merchant Portal
2
+
3
+ Source: `Portal Guide 2026.pdf`, version 2026.
4
+
5
+ ## Logging in {#log-into-merchant-portal}
6
+
7
+ Portal URL: <https://onlinepayments.jazzcash.com.pk/merchant-frontend/login>
8
+
9
+ - **Institution ID (Merchant ID) and Username** are provided by the JazzCash team.
10
+ - **Password** arrives by email and must be reset before first use.
11
+ - After clicking Login you receive a one-time password by SMS **and** email. If it does not arrive, use the Resend button.
12
+
13
+ After logging in, the dashboard shows the functions available to you in the left pane, according to your user rights and transaction permissions.
14
+
15
+ ## Where the integration credentials live {#credentials}
16
+
17
+ Integration credentials — Merchant ID, Password, Integrity Salt — are under **Integration → Credentials**, along with the fields for your Return URL and IPN URL. The sandbox portal (<https://onlinepayments.jazzcash.com.pk/sandbox-frontend/>) has the same layout.
18
+
19
+ The Merchant MPIN is also stored here, and must be saved before any refund will succeed.
20
+
21
+ ## Role management {#role-management}
22
+
23
+ The Role Management tab adds and updates the users who may access the merchant portal.
24
+
25
+ - **Creating a user** — from Role Management, click Create to add a user, a description and a role.
26
+ - **User management** — update a user's username or email, or delete the user.
27
+
28
+ ## Transaction management {#transaction-management}
29
+
30
+ Transaction Management shows transaction history and is where reports are extracted.
31
+
32
+ 1. Click the system date and select the desired From–To date and time range.
33
+ 2. Click Export. Two options appear: **Export** (the full Transaction Detail Report, or TDR) and **Export Summary**.
34
+ 3. A success message confirms the extract has been queued.
35
+ 4. Open the **Reports** tab to follow it. The status changes from **Processing** to **Ready** when the TDR is downloadable.
36
+
37
+ ## Common questions {#common-questions}
38
+
39
+ | Question | Answer |
40
+ | --- | --- |
41
+ | Where is my Integrity Salt? | Integration → Credentials, in the portal for the environment you are calling |
42
+ | Why is my payment method missing? | JazzCash must enable it against your Merchant ID; send them the ID and ask |
43
+ | Why do refunds fail? | The Merchant MPIN must be saved in the portal, not only sent in the request |
44
+ | Where is my transaction report? | Transaction Management → Export, then collect it from the Reports tab once it reads Ready |
45
+ | I did not receive the login OTP | It is sent by both SMS and email; use Resend |
@@ -0,0 +1,74 @@
1
+ # Shopify Integration
2
+
3
+ Source: `Shopify Guide.pdf`, version 2026.
4
+
5
+ ## Introduction {#introduction}
6
+
7
+ Installs the JazzCash Shopify app in a Shopify store. This guide covers migration from the older JazzCash app, which must be deactivated but **not uninstalled** until outstanding transactions are settled.
8
+
9
+ ## Before you begin {#before-you-begin}
10
+
11
+ - Ensure all pending transactions in the old JazzCash app are captured, settled or refunded.
12
+ - Export any historical transaction reports you need from the old app.
13
+ - Have your **Merchant ID**, **Integrity Salt** and **Password** to hand.
14
+
15
+ ## Step 1 — Deactivate the old payment method {#step-1-deactivate}
16
+
17
+ 1. Shopify Admin → **Settings → Payments**.
18
+ 2. Find the existing JazzCash payment method.
19
+ 3. Click **Manage**, then **Deactivate**.
20
+
21
+ **Do not uninstall the old app yet.** Uninstalling before outstanding transactions settle loses access to them.
22
+
23
+ ## Step 2 — Install the new app {#step-2-install}
24
+
25
+ 1. Open the official listing: <https://apps.shopify.com/jazzcash>
26
+ 2. Click **Install**.
27
+ 3. Approve the requested permissions.
28
+
29
+ ## Step 3 — Onboarding {#step-3-onboarding}
30
+
31
+ The onboarding screen asks for:
32
+
33
+ 1. Merchant ID
34
+ 2. Integrity Salt
35
+ 3. Password
36
+
37
+ Click **Continue / Save**. Enter the credentials carefully: a mistake here surfaces later as payment failures rather than as a setup error.
38
+
39
+ ## Step 4 — Activate the new payment method {#step-4-activate}
40
+
41
+ Shopify Admin → **Settings → Payments** → find the new JazzCash method → **Activate**.
42
+
43
+ ## Step 5 — Check settings and transaction logs {#step-5-verify}
44
+
45
+ Click **Open App**, confirm your credentials, and open the **Transactions** tab to see the transaction log.
46
+
47
+ ## Step 6 — Test the integration {#step-6-test}
48
+
49
+ Before going live:
50
+
51
+ 1. Place a small-value test order.
52
+ 2. Confirm the payment redirects correctly.
53
+ 3. Confirm the payment status updates in Shopify.
54
+ 4. Confirm the order is marked **Paid** after a successful transaction.
55
+
56
+ ## Step 7 — Uninstall the old app {#step-7-uninstall}
57
+
58
+ Only once all old transactions are settled and the new app is activated and tested: Shopify Admin → **Settings → Apps and Sales Channels** → uninstall the old JazzCash app.
59
+
60
+ ## Step 8 — Refunds {#step-8-refunds}
61
+
62
+ Refunds are processed from the **order details** page; enter the quantity to refund.
63
+
64
+ Before attempting a refund, confirm that test transactions have been performed and that **the MPIN is already saved in the merchant portal**. This is the usual cause of a refund failing in Shopify.
65
+
66
+ ## Common failures {#common-failures}
67
+
68
+ | Symptom | Cause | Fix |
69
+ | --- | --- | --- |
70
+ | Both JazzCash methods appear at checkout | Old method still active | Deactivate the old method in Settings → Payments |
71
+ | Payments fail immediately after install | Credentials mistyped during onboarding | Re-check Merchant ID, Integrity Salt and Password in Open App |
72
+ | Refund button does nothing | MPIN not saved in the merchant portal | Save it, then retry |
73
+ | Old transactions inaccessible | Old app uninstalled too early | Contact JazzCash support; export reports before uninstalling in future |
74
+ | Order not marked Paid | Payment succeeded but the status callback did not | Check the app's Transactions tab, then reconcile with Status Inquiry |
@@ -0,0 +1,32 @@
1
+ # Status Inquiry Guide (2025-26 edition — superseded)
2
+
3
+ Source: `Status Inquiry Guide_Merchants_Latest_2025-26.pdf`.
4
+
5
+ > **Superseded.** Use [status-inquiry](status-inquiry.md), the 2026 edition. This document is retained only because merchants still hold copies of it and because it contains one contradiction worth being able to explain.
6
+
7
+ ## What differs from the 2026 edition {#differences}
8
+
9
+ The endpoints, the request payloads and the response shapes are identical. Two things differ in the prose:
10
+
11
+ 1. The 2025-26 edition says only `pp_PaymentResponseCode` is considered when confirming a pending transaction. The 2026 edition adds `pp_Status` alongside it.
12
+
13
+ 2. **The sample response is internally contradictory.** It shows:
14
+
15
+ ```
16
+ pp_PaymentResponseCode: '121' // documented as "completed"
17
+ pp_PaymentResponseMessage: 'Sorry! Your transaction was not successful. Please try again later.'
18
+ pp_Status: 'Completed'
19
+ ```
20
+
21
+ A `121` code with a `Completed` status is a successful transaction. The failure message beside it is a copy-paste error, not a real combination. The 2026 edition corrects it to "Thank you for using JazzCash. Your transaction was processed successfully."
22
+
23
+ ## Guidance {#guidance}
24
+
25
+ If a merchant quotes the failure message while showing a `121` code, they are reading this edition. Point them at the 2026 guide. Do not build logic that reads `pp_PaymentResponseMessage` to decide an outcome — read the code.
26
+
27
+ ## Endpoints {#endpoints}
28
+
29
+ Unchanged from the 2026 edition:
30
+
31
+ - v1.1 — `https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/status/inquiry`
32
+ - v2.0 — `https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v2/rest/payments/status/inquiry`