Programming Guide » History » Revision 12
Revision 11 (chin-yeh, 09/21/2011 03:09 PM) → Revision 12/21 (chin-yeh, 09/21/2011 03:13 PM)
{{toc}} h1. Programming Guide Describes how to integrate the mPay into online mall. *Steps-by-steps:* # First, refer to the [[Programming_Guide#Generate-Redirect-URL|Generate Redirect URL]] section on how to generate the redirect URL # And then, include the method, [[Programming_Guide#Capture-Payment-Status|Capture Payment Status]] in the return/receipt page to capture & persist the payment status # Finally, query the [[Specification#Tables-Used|MPAY_INTERFACE]] *MPAY_INTERFACE* table to get the payment status. *Demo application:* * Generate Redirect URL (for hosted payment form) > http://192.168.2.68/ecosway/mpay-sample/payment_form.html * Query Payment Status: > http://192.168.2.68/ecosway/mpay-sample/query.html h2. Source files > Get the source files from [[wiki#SCM|SCM]]. *Files:* * my.com.eCosway.mpay ** Commons - list of common constant ** MpayInterfaceUtils - an utility to perform data persistence related operation ** MpayPaymentUtils - the mPay APIs ** MpayProperties - data model of the mPay properties ** PaymentRequest - data model of the mPay's payment request ** PaymentResponse - data model of the mPay's payment response * resources.properties.mpay ** mpay.properties - the application properties file * source file of demo application (JSP): ** mpay-sample folder h2. Generate Redirect URL Generates the URL which will be used to redirect user to the mPay's hosted payment form. * *Method Signature:* <pre> <code class="JAVA"> public static Map<String, String> genRedirectFormData(String orderNo, Date txnDate, String amount, String returnUrl, String locale, PaymentMethod paymentMethod) </code> </pre> * *Demo:* ** [[Programming Guide]] h3. Input Parameters * *orderNo* - the unique order number * *txtDate* - the transaction date * *amount* - the transaction amount * *returnUrl* - mPay will redirect the user to this URL after made the payment * *locale* - the display language of the payment form * *paymentMethod* - the payment method, e.g. _CUP_, _Alipay_ h3. Output Parameters Use the returned key-pair values to construct the *HTML form*. Due to the limit of the length of a URL, the recommended HTTP method is *POST*. This is because extremely long URL will not work in most popular browsers and most importantly the length of the query string is unknown. *Returned key-pair values:* * *form_action* - the URL of the hosted payment form. To be placed in the *action* attribute of the form * *encmsg* - the encrypted message. To be placed in the input element * *sigmsg* - the signed message. To be placed in the input element * *certserial* - the serial number of the certificate. To be placed in the input element h3. Code Snippets <pre> <code class="JAVA"> <body> <% String orderNo = request.getParameter("order_no"); String txnDate = request.getParameter("txn_date"); String amount = request.getParameter("amount"); String returnUrl = request.getParameter("return_url"); String locale = request.getParameter("locale"); String paymentMethod = request.getParameter("payment_method"); Date transactionDate = new SimpleDateFormat("yyyyMMddHHmmss").parse(txnDate); PaymentMethod cardType = PaymentMethod.valueOf(paymentMethod); Map<String, String> formData = MpayPaymentUtils.genRedirectFormData( orderNo, transactionDate, amount, returnUrl, locale, cardType); %> <p> Redirecting you to the mPay payment form, it may takes up to 1 minute... </p> <form name="form1" method="post" action="<%= formData.get("form_action") %>"> <input type=hidden name=encmsg value="<%=formData.get("encmsg")%>"/> <input type=hidden name=sigmsg value="<%=formData.get("sigmsg")%>"/> <input type=hidden name=certserial value="<%=formData.get("certserial")%>"/> </form> <script language="javascript"> function submitForm(){ document.form1.submit(); } window.onload=submitForm ; </script> </body> </code> </pre> h2. Query Payment Status Queries the payment status of the submitted transaction. * *Method Signature:* <pre> <code class="JAVA"> public static PaymentResponse queryPaymentStatus(String orderNo) </code> </pre> * *Demo:* ** [[Programming Guide]] h3. Input Parameters orderNo - the order number of the submitted transaction h3. Output Parameters The fields of the returned object, *PaymentResponse*: * *merchantId* - the merchant ID * *merchantTId* - the merchant terminal ID * *orderNo* - the order number * *systemDate* - the system date of mPay * *refNo* - the transaction ID of mPay * *amount* - the settlement amount * *currencyCode* - the currency of the settlement amount * *settlementDate* - the settlement date * *responseCode* - the response code * *authCode* - the bank authorization code if any * *transactionStatus* - indicate if it's success h3. Code Snippets <pre> <code class="JAVA"> <% PaymentResponse paymentResponse = MpayPaymentUtils.queryPaymentStatus(request.getParameter("order_no")); %> </code> </pre>