This guide is written for application developers who want to integrate AlipayHK WAP payment solution. Implementing this solution requires software development skills. You must write code that uses the API request and reply fields to integrate AlipayHK WAP payment solution into your existing order management system.
AlipayHK WAP (Wireless Application Protocol) payment is a solution designed for mobile payment on the mobile browser. Customers can user their account and payment password to pay a bill from the mobile browser. After integrating the AlipayHK WAP payment service, both the Alipay and AlipayHK wallet are supported. You should present both the Alipay payment button and the AlipayHK payment button on your website for the buyers to complete the payment.
In the list of request and response parameters, all of them need to be signed except sign and sign_type. (sign_type also needs to be signed in some cases in the list of request parameters)
Use the following code to package the data:
//package the request parameters
Map sParaTemp = new HashMap();
sParaTemp.put("service", AlipayConfig.service);
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("notify_url", AlipayConfig.notify_url);
sParaTemp.put("return_url", AlipayConfig.return_url);
sParaTemp.put("out_trade_no", out_trade_no);
sParaTemp.put("subject", subject);
sParaTemp.put("total_fee", total_fee);
sParaTemp.put("body", body);
sParaTemp.put("currency", currency);
sParaTemp.put("product_code", product_code);
split_fund_info = split_fund_info.replaceAll("\"", "'");
sParaTemp.put("split_fund_info", split_fund_info);
sParaTemp.put("secondary_merchant_id",secondary_merchant_id);
sParaTemp.put("secondary_merchant_name",secondary_merchant_name);
sParaTemp.put("secondary_merchant_industry",secondary_merchant_industry);
Rearrange parameters in the data set alphabetically_input_charset=utf-8&app_pay=Y&body=test¤cy=USD¬ify_url=http://d4779318.ngrok.io/new_create_forex_trade_wap_JAVA-UTF-8-RSA/notify_url.jsp&out_trade_no=test20170901162***&partner=2088101122136***&product_code=NEW_WAP_OVERSEAS_SELLER&return_url=http://d4779318.ngrok.io/new_create_forex_trade_wap_JAVA-UTF-8-RSA/return_url.jsp&service=create_forex_trade_wap&subject=test123&total_fee=0.01
This is the pre-sign string.Private Key is necessary for MD5 signature. The MD5 private key is the 32-byte string which is composed of English letters and numbers. Partner can log on the Merchant Service Center (https://global.alipay.com) to check the private key.
After the partner receives the pre-sign string during requesting, the private key should be appended to the pre-sign string to generate the new string. Then this new string would be calculated with the MD5 signature algorithm by the MD5 signature function. Thus, the result 32-byte string is the signature result string. (the value is given to parameter “sign”)
After receiving the pre-sign string during responding from Alipay system, the next step is the same as the procedure of Sign for request. When the 32-byte signature result string is generated, it should be verified whether the value is equal to the value of the parameter “sign”. If equal, the verification would be passed.
Both private key and public key are necessary for RSA signature. Both private key and public key are generated with OPENSSL by partner. Partner and Alipay need to exchange their own public key. Therefore, partner uses Alipay public key and partner private key.
After the partner receives the pre-sign string during requesting, the partner private key and the pre-sign string are used in the RSA signature algorithm by the RSA signature function to get the result string. (the value is given to parameter “sign”)
After receiving the pre-sign string during responding from Alipay system, the Alipay public key, the pre-sign string and the parameter “sign” are used in the RSA signature asymmetric algorithm by the RSA signature function to accomplish the signature verification.
With the growing number of Chinese consumers purchasing merchandise on the oversea merchants’ site direct, the merchant could integrate with Alipay Standard Payment solution to offer the users the familiar user experience that they comfortable with, along the convenience provided for both the merchants and the consumers on the payment, FX exchange and settlement.
Once integrated, the merchant’s site will present an Alipay payment button when the consumer completes the payment and checks out.
When the buyer needs to pay, the checkout page is presented as below. Choose Alipay:
The buyer is redirected to the login page. Use the Alipay account to log in.
After login, the payment page is shown. Confirm to pay.
The payment password might be needed:
With the correct password entered, the page with the information of payment success is shown and the buyer is redirected back to the merchant website after this page.
Merchants can reference the following Alipay demo code to do quick integration or directly check the API document and construct the http request to make the payment.
Language | MD5 | RSA |
---|---|---|
JAVA |
||
PHP |
||
.Net |
For a full list of demo codes, see Demo code list.
Take JAVA demo code using MD5 signature algorithm as an example. Import the demo code project into your IDE tool, like Eclipse, then run:
Click payment button to pay:
Login to Alipay:
Input payment password to pay:
Payment success:
Buyer is brought back to the merchant's website after payment according to parameter return_url.
Merchant can integrate the demo code into or write their own code and run in Alipay production. If using demo code, change the following two settings:
https://mapi.alipay.com/gateway.do? in AlipaySubmit.java
Parameter |
Type (length in bytes) |
Description |
Example |
Basic Parameter |
|||
sign_type |
String |
Signature method. The following are supported. Must be uppercase. |
RSA |
sign |
String |
Signature value. |
e5815a4556db338ed237f7d3fd222184 |
Business Parameter |
|||
trade_status |
String(32) |
The status of Alipay's transaction. |
TRADE_FINISHED |
trade_no |
String(64) |
Alipay Transaction ID. Max length is 64 and min length is 16. |
2015070800001000100080029361 |
out_trade_no |
String(64) |
out_trade_no passed in by the merchant in the request |
2525759240575424 |
currency |
String(3) |
Currency code. |
USD |
Number(8,2) |
The amount of the payment |
11.00 |
|
rmb_fee |
Number(8,2) |
The RMB amount of the payment. This parameter is only returned when merchants used it in the request. |
1.00 |
Wrong:http://www.alipay.com/alipay/return_url.php?xx=11
Right:http://www.alipay.com/alipay/return_url.php
https://mapi.alipaydev.com/gateway.do?subject=Beautylish+Order+%23TESTING+-+CHANGE+ME&sign_type=RSA&out_trade_no=8315919735609649¤cy=USD&total_fee=100&partner=2088101122136241¬ify_url=http%3A%2F%2Fwww.alipay.com& sendFormat=normal&return_url=http%3A%2F%2Fwww.alipay.com&sign=Rbn7JXjgG%2BWt%2FHK8ej1oov8OTDrI7rxH%2FQmfNJ%2FyASGuayUVvD3NkoP0mLo5rmRNF8qNrzH0lQ68U0EFcU4Z6pCVavHI%2BML3lNUagkFQ3YcS6f9pY1WoyEUt02%2FC2VyzxiEDTM%2FS6o6YiDZaUUdS2EPTHPBgvJLvghcafyMKTIo%3D&_input_charset=UTF-8&secondary_merchant_id=834945&secondary_merchant_industry=3435&secondary_merchant_name=holiday&service=create_forex_trade_wap&trade_information={"business_type":"1","hotel_name":"zlidu, sluhg-987, 889utng","check_in_time":"2018-10-20","check_out_time":"2018-10-22"}
http://api.receive.com/receive_notify.htm?sign=6c1fd40533ccb5126aa78778ab10417a&trade_no=2015070800001000100080029361&total_fee=11.00&sign_type=MD5&out_trade_no=2525759240575424&trade_status=TRADE_FINISHED¤cy=USD
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Business Logic Errors
The following are the possible errors related to the business logics.
Returned Result | Description |
FOREX_MERCHANT_NOT_SUPPORT_THIS_CURRENCY | Cannot support this currency |
ILLEGAL_SECURITY_PROFILE | Cannot support this kind of encryption |
REPEAT_OUT_TRADE_NO | out_trade_no parameter is duplicated |
ILLEGAL_CURRENCY | Currency parameter is incorrect |
ILLEGAL_TIMEOUT_RULE | Timeout_rule parameter is incorrect |
SYSTEM_EXCEPTION | Alipay system error |
ILLEGAL_ARGUMENT | Incorrect parameter |
If there are errors in calling parameters, Alipay MAPI gateway will capture it and display the errors. However, the control flow will stay at the Alipay side and will NOT return to the merchant’s site.
Returned Result | Description |
ILLEGAL_SIGN | Illegal signature |
ILLEGAL_SERVICE | Service Parameter is incorrect |
ILLEGAL_PARTNER | Incorrect Partner ID |
ILLEGAL_SIGN_TYPE | Signature is of wrong type. |
ILLEGAL_PARTNER_EXTERFACE | Service is not activated for this account |
ILLEGAL_DYN_MD5_KEY | Dynamic key information is incorrect |
ILLEGAL_ENCRYPT | Encryption is incorrect. |
ILLEGAL_USER | User ID is incorrect. |
ILLEGAL_EXTERFACE | Interface configuration is incorrect. |
ILLEGAL_AGENT | Agency ID is incorrect. |
HAS_NO_PRIVILEGE | Has no right to visit. |
INVALID_CHARACTER_SET | The character set is invalid. |
System Errors
When system error occurs, please contact Global Merchant Technical Support to assist the error repair.
Returned result | Description |
SYSTEM_ERROR | Alipay system error |
SESSION_TIMEOUT | Session timeout |
ILLEGAL_TARGET_SERVICE | Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM | Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED | The interface has been closed. |
The single refund interface allows the partners to refund a transaction.
Parameter | Type (length in bytes) | Description | Optional | Example | ||
Basic Parameter | ||||||
service | String | Service Name | N | forex_refund | ||
partner | String(16) | Partner ID. Composed of 16 digits beginning with 2088. |
N | 2088001159940003 | ||
_input_charset | String | The charset with which the request data is encoded; UTF-8 is supported |
N | UTF-8 | ||
sign_type | String | Signature method. The following are supported. Must be uppercase. DSA, RSA, and MD5. |
N | RSA | ||
sign | String | Signature value. | N | e5815a4556db338ed237f7d3fd222184 | ||
Business Parameter | ||||||
out_return_no | String(64) | The unique refund ID for refund request. | N | 205485121225 | ||
out_trade_no | String(64) | The payment ID for the original payment txn. | N | 205485121223 | ||
return_amount | Number(8,2) | The amount to refund in settlement currency. The value is between 0.01 – 1000000(max 2 digits after the decimal). Must use one of the two parameters: return_amount and return_rmb_amount | Y | 100.30 | ||
return_rmb_amount | Number(15) | Use this field to refund in CNY. The value is between 0.01 – 1000000(max 2 digits after the decimal). Must use one of the two parameters: return_amount and return_rmb_amount | Y | 10.20 | ||
currency | String(10) | Currency code. Even when return_rmb_amount is not null, currency is still foreign currency, not CNY | N | USD | ||
gmt_return | String(14) | Refund Transaction time. YYYYMMDDHHMMSS, Beijing Time | N | |||
reason | String(100) | Reason for the refund, for example, out of supply, etc. | Y | 100.30 | ||
is_sync |
String(1) |
Refund processing mode: Y - Execute the refund immediately and return the final result. N - The refund request first recorded then scheduled for later processing. In case of refund execution failures, the system will automatically retry. |
Y(The default value is N) |
Y |
The response is in XML format
Parameter | Type (length in bytes) | Description | Optional | Example |
is_success | String | Status of the API call, ‘T’ or ‘F’ | N | T |
error | String | Error message | Y | REPEATED_REFUNDMENT_REQUEST |
https://intlmapi.alipay.com/gateway.do?reason=refund+test&return_amount=0.1&sign_type=MD5& out_trade_no=iamdjc456¤cy=HKD&sign=8e9004797d3c7112b907bd184d775662&_input_charset=UTF-8&out_return_no=test005&service=forex_refund&partner=2088701998606387
<?xml version="1.0" encoding="GBK"?>
<alipay>
<is_success>T</is_success>
</alipay>
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>F</is_success>
<error>ILLEGAL_SIGN</error>
</alipay>
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Returned result |
Description |
REFUNDMENT_VALID_DATE_EXCEED |
Could not refund after the specified refund timeframe. |
SYSTEM_EXCEPTION |
System exception |
ILLEGAL_ARGUMENT |
Illegal argument |
REPEATED_REFUNDMENT_REQUEST |
Duplicated refund request |
RETURN_AMOUNT_EXCEED |
Refund amount is over the payment amount |
CURRENCY_NOT_SAME |
Different currency from the payment currency |
PURCHASE_TRADE_NOT_EXIST |
The payment transaction does not exist |
REFUND_CHARGE_ERROR |
The refund failed because the payment is in progress. Please try again later. |
If the calling parameters have error in it, Alipay MAPI gateway will capture it and display the errors. However, the control flow will stay at the Alipay side and will NOT return to the merchant’s site.
Returned result |
Description |
SYSTEM_EXCEPTION |
Alipay system error |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_SIGN_TYPE |
Signature is of wrong type. |
ILLEGAL_PARTNER_EXTERFACE |
Service is not activated for this account |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect |
ILLEGAL_ENCRYPT |
Encryption is incorrect. |
ILLEGAL_USER |
User ID is incorrect. |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect. |
ILLEGAL_AGENT |
Agency ID is incorrect. |
HAS_NO_PRIVILEGE |
Has no right to visit. |
INVALID_CHARACTER_SET |
The character set is invalid. |
When system error occurs, please contact Global Merchant Technical Support to assist the error repair.
Returned result | Description |
SYSTEM_ERROR |
Alipay system error |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED |
The interface has been closed. |
The partners can use this API to obtain the information on a particular transaction, such as the transaction’s ID, out_trade_no, item name, transaction status, etc.
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type(length) |
Description |
Optional |
Example |
Basic Parameters | ||||
service |
String |
API name |
N |
single_trade_query |
partner |
String(16) |
A unique partner ID to identify a contracted Alipay Account. |
N |
2088101011913539 |
_input_charset |
String |
The charset on partner website like utf-8、gbk、gb2312 etc. |
N |
gbk |
sign_type |
String |
Signature method. The value can be MD5, RSA, or RSA2. RSA2 is preferred. Uppercase must be used. |
N |
MD5 |
sign |
String |
Sign value |
N |
7d314d22efba4f336fb187697793b9d2 |
Business Parameters |
||||
trade_no |
String(64) |
The unique trade number in Alipay system. |
Y |
2008102303210710 |
out_trade_no |
String(64) |
A unique number to identify a transaction in partner system. If both trade_no and out_trade_no are provided, trade_no is preferred. |
Y |
6843192280647118 |
Note:
This API recieve https request only;
After Alipay finish processing request data, it will notify partner website by posting response data by the way of redirection. The response data of such procedure are these response parameters.
Synchronous Response Parameters Description
Parameters |
Type(length) |
Description |
Optional |
Example |
Basic Parameters |
||||
is_success |
String |
Indicate whether the API has been called successfully, it does not indicate the result of business
|
N |
T |
sign_type |
String |
DSA, RSA or MD5, capital letter |
N |
MD5 |
sign |
String |
Sign value |
N |
7d314d22efba4f336fb187697793b9d2 |
error |
String |
Error information when query fails. |
Y |
TRADE_NOT_EXIST |
Business Parameters |
||||
buyer_email |
String |
Buyer Alipay Account |
N |
tsxxxe01@alipay.com |
buyer_id |
String |
A unique buyer ID to identify a contracted Alipay Account. |
N |
208xxxxxxxxx8955 |
trade_status |
String |
The status of this transaction can be: |
N |
TRADE_FINISHED |
is_total_fee_adjust |
String |
Is total fee adjusted
|
N |
F |
out_trade_no |
String |
A unique number to identify a transaction in partner system. |
Y |
6843192280647118 |
trade_no |
String |
The unique trade number in Alipay system.Length from 16 to 64. To query by Alipay trade number is preferred w.r.t the accuracy of the result. |
N |
2008102303210710 |
subject |
String |
Goods name/trade name/order name/order key words etc. |
N |
Apple |
flag_trade_locked |
String |
|
N |
0 |
body |
String |
Detail description about a transaction, if there are multiple items involved, accumulate together into body. |
N |
Gundam MKII,Miniature Bracelet |
gmt_create |
Date |
Time when transaction is created. Format: yyyy-MM-dd HH:mm:ss |
N |
2008-10-22 20:49:31 |
seller_email |
String |
Partner Alipay Account |
N |
tianc001@alipay.com |
seller_id |
String |
A unique partner ID to identify a contracted Alipay Account. A 16 digit number starts with 2088 |
N |
2088002007018966 |
total_fee |
Number |
The total amount of the transaction for the escrow payment. Range: 0.01 to 1000000.00, accurate to 2 digits after the decimal point. Unit: RMB. |
N |
100 |
price |
Number |
Unit:RMB Yuan. Value Range [0.01,100000000.00],accurate to two decimal places. |
Y |
10.00 |
quantity |
Number |
Quantity of goods. |
Y |
1 |
coupon_discount |
String |
Coupon discount. |
Y |
1 |
use_coupon |
String(1) |
Whether coupon is used in transaction.
|
Y |
T |
discount |
Number |
Discount |
Y |
0.00 |
gmt_last_modified_time |
Date |
Time when the total fee is modified latest. Format: yyyy-MM-dd HH:mm:ss |
Y |
2008-01-08 20:39:30 |
gmt_payment |
Date |
Time when transaction is paid by user. Format: yyyy-MM-dd HH:mm:ss |
Y |
2008-10-22 20:49:50 |
to_buyer_fee |
String |
Accumulative refunded fee. |
Y |
1.00 |
to_seller_fee |
String |
Accumulative fee paid to seller. |
Y |
20.00 |
payment_type |
String |
Please refer to “Payment Type” |
Y |
1 |
operator_role |
String |
|
Y |
B |
https://mapi.alipaydev.com/gateway.do?service=single_trade_query&sign=d8ed9f015214e7cd59bfadb6c945a87b&trade_no=2010121502730740&partner=2088721091300630&out_trade_no=2009011803596246&sign_type=MD5
<alipay>
<is_success>T</is_success>
<request>
<param name="_input_charset">UTF-8</param>
<param name="service">single_trade_query</param>
<param name="partner">2088721091300630</param>
<param name="out_trade_no">2009011803596246</param>
<param name="sendFormat">normal</param>
</request>
<response>
<trade>
<body>hello</body>
<buyer_email>inxxxxt059@service.alipay.com</buyer_email>
<buyer_id>208xxxxxxxxx5555</buyer_id>
<discount>0.00</discount>
<flag_trade_locked>0</flag_trade_locked>
<gmt_create>2017-06-15 16:25:31</gmt_create>
<gmt_last_modified_time>2017-06-15 16:25:58</gmt_last_modified_time>
<gmt_payment>2017-06-15 16:25:58</gmt_payment>
<is_total_fee_adjust>F</is_total_fee_adjust>
<operator_role>B</operator_role>
<out_trade_no>2009011803596246</out_trade_no>
<payment_type>100</payment_type>
<price>0.02</price>
<quantity>1</quantity>
<seller_email>test@126.com</seller_email>
<seller_id>2088721091300630</seller_id>
<subject>world</subject>
<to_buyer_fee>0.00</to_buyer_fee>
<to_seller_fee>0.02</to_seller_fee>
<total_fee>0.02</total_fee>
<trade_no>2017061521001003550204235677</trade_no>
<trade_status>TRADE_FINISHED</trade_status>
<use_coupon>F</use_coupon>
</trade>
</response>
<sign>6283ce0cf5aaa812d9c1d29719d53e8d</sign>
<sign_type>MD5</sign_type>
</alipay>
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>F</is_success>
<error>ILLEGAL_SIGN</error>
</alipay>
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Error Codes |
Descriptions |
TRADE_NOT_EXIST |
Trade not exist. out_trade_no or Alipay trade_no is incorrect |
ILLEGAL_SIGN |
Illegal signature. |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect. |
ILLEGAL_ENCRYPT |
Encryption is incorrect. |
ILLEGAL_ARGUMENT |
Parameter is incorrect. |
ILLEGAL_SERVICE |
Service parameter is incorrect. |
ILLEGAL_USER |
User ID is incorrect. |
ILLEGAL_PARTNER |
Partner ID is incorrect. |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect. |
ILLEGAL_PARTNER_EXTERFACE |
Partner’s interface information is incorrect. |
ILLEGAL_SECURITY_PROFILE |
Matching private key configuration has not been found. |
ILLEGAL_AGENT |
Agency ID is incorrect. |
ILLEGAL_SIGN_TYPE |
The signature type is incorrect. |
ILLEGAL_CHARSET |
The character set is illegal. |
ILLEGAL_CLIENT_IP |
Client IP address is illegal |
HAS_NO_PRIVILEGE |
Has no right to visit. |
ILLEGAL_DIGEST_TYPE |
Digest type is illegal |
ILLEGAL_DIGEST |
Digest is illegal |
ILLEGAL_FILE_FORMAT |
File format is illegal |
ILLEGAL_ENCODING |
Encoding type is illegal |
EXTERFACE_IS_CLOSED |
API is closed |
ILLEGAL_REQUEST_REFERER |
Anti-phishing checks illegal request |
ILLEGAL_ANTI_PHISHING_KEY |
Anti-phishing checks illegal timeframe |
ANTI_PHISHING_KEY_TIMEOUT |
Anti-phishing checks timeframe timeout |
ILLEGAL_EXTER_INVOKE_IP |
IP Anti-phishing checks illegal IP |
When system error occurs, please contact Alipay Technical Support to assist the error repair..
Returned result | Description |
SYSTEM_ERROR |
Alipay system failed to process the request due to temporary internal glitch. |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED |
The interface has been closed. |
Type |
Description |
01 |
Coupon Fee Pre-payment |
02 |
Coupon Fee Payment |
03 |
Reminding Payment |
04 |
Automatic Sending Goods |
1 |
Merchandise |
2 |
Service Purchase |
3 |
Online Auction |
4 |
Donation |
5 |
Post Fee Compensation |
6 |
Bonus |
7 |
Funds Purchase |
8 |
Air Ticket |
9 |
Go Dutch |
10 |
Group Purchase |
11 |
Electronic Ticket |
12 |
Lottery Ticket |
13 |
Auction |
14 |
Mobile Payment |
15 |
Flowers & Gifts |
16 |
Agent Electronic Ticket |
17 |
Party Membership Dues |
18 |
Foreign Exchange |
19 |
Automatic Charge |
20 |
Refund of Overseas Payment |
21 |
Refund of Instant Payment |
22 |
Business Deposit |
24 |
Cash Gift |
25 |
Rent |
26 |
Motopay |
23 |
Shopping Chart |
27 |
Escrow Payment of Group Purchase |
Status |
Description |
WAIT_BUYER_PAY |
Transaction awaits user payment. |
WAIT_SELLER_SEND_GOODS |
Transaction awaits seller sending goods. |
WAIT_BUYER_CONFIRM_GOODS |
Transaction awaits buyer confirming goods. |
TRADE_FINISHED |
Transaction is finished successfully. |
TRADE_CLOSED |
Transaction is closed during processing (finished, not successfully) |
WAIT_SYS_CONFIRM_PAY |
Transaction awaits system conforming payment, please do not send goods. |
WAIT_SYS_PAY_SELLER |
Buyer confirm goods, transaction awaits system paying to seller. |
TRADE_REFUSE |
Transaction refused. |
TRADE_REFUSE_DEALING |
Transaction refusing. |
TRADE_CANCEL |
Transaction canceled. |
TRADE_PENDING |
Pending Transaction. |
TRADE_SUCCESS |
Transaction complete, and available for refund |
BUYER_PRE_AUTH |
Buyer has paid. (IVR Payment) |
COD_WAIT_SELLER_SEND_GOODS |
Transaction awaits seller sending goods. (COD) |
COD_WAIT_BUYER_PAY |
Transaction awaits user payment. (COD) |
COD_WAIT_SYS_PAY_SELLER |
Buyer confirm goods, transaction awaits system paying to seller. (COD) |
Status |
Description |
ZHIFUBAO_CONFIRM |
Custom Service confirms goods for buyer. |
ZHIFUBAO_CANCEL_FP |
Custom Service cancels instant payment for buyer. |
DAEMON_CONFIRM_CANCEL_PRE_AUTH |
Expiration Program cancels pre authorization. |
DAEMON_CONFIRM_CLOSE |
Expiration Program cancels transaction as buyer did not pay. |
From time to time, the merchant needs to reconcile the transactions. This interface enables the merchants to download the transaction list in a specific time span to reconcile the transactions.
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
|
Basic Parameter |
|||||
service |
String |
Service Name |
N |
forex_compare_file |
|
partner |
String(16) |
Partner ID. |
N |
2088001159940003 |
|
sign_type |
String |
Signature method. The following are supported. Must be uppercase. |
N |
RSA |
|
sign |
String |
Signature value. |
N |
e5815a4556db338ed237f7d3fd222184 |
|
Business Parameter |
|||||
start_date |
String |
The start date of the reconciliation period, formatted as YYYYMMDD |
N |
|
|
end_date |
String |
The end date of the reconciliation period, formatted as YYYYMMDD |
N |
|
The responses could be in different formats for different use cases
https://mapi.alipay.com/gateway.do?sign_type=MD5&sign=bb4c92c7cb7fc8a5280fe5f9f7ac309c&_input_charset=UTF-8&end_date=20150524&service=forex_compare_file&partner=2088002007018916&start_date=20150520
The response is HTTP response with an attached file, which is the reconciliation file with the transactions included.
The sample is for illustration of the browser download.
File download failed: Over 10 days to Date period
<?xml version="1.0" encoding="UTF-8"?>
<alipay>
<is_success>F</is_success>
<error>ILLEGAL_SIGN</error>
</alipay>
23342347424|112.11|USD|20070616090001||P|2.24|P|Unliquidated
23342343423|102.32|USD|20070615090001|2007622090001|P|2.04|L|Liquidated
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Returned result |
Description |
Over limit balance amount record |
Exceed the maximum entries : 100000 |
System exception |
System exception |
Merchant ID incorrect |
Incorrect partner ID |
Finish date not ahead of today |
The end date could not be the future time |
No balance amount data in the period |
Do not have any trade during the period |
Over 10 days to date period |
Over 10 day limit for the request time span |
Finish date ahead of begin date |
The end date needs to be later than the begin date |
Illegal date period |
Null in date field |
Date format incorrect YYYYMMDD |
Incorrect format of the date ,YYYYMMDD |
Internet connected exception ,please try later |
Network exception |
If the calling parameters have error in it, Alipay MAPI gateway will capture it and display the errors. However, the control flow will stay at the Alipay side and will NOT return to the merchant’s site.
Returned result | Description |
SYSTEM_EXCEPTION |
Alipay system error |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_SIGN_TYPE |
Signature is of wrong type. |
ILLEGAL_PARTNER_EXTERFACE |
Service is not activated for this account |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect |
ILLEGAL_ENCRYPT |
Encryption is incorrect. |
ILLEGAL_USER |
User ID is incorrect. |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect. |
ILLEGAL_AGENT |
Agency ID is incorrect. |
HAS_NO_PRIVILEGE |
Has no right to visit. |
INVALID_CHARACTER_SET |
The character set is invalid. |
When system error occurs, please contact Global Merchant Technical Support to assist the error repair.
Returned result | Description |
SYSTEM_ERROR |
Alipay system error |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED |
The interface has been closed. |
This interface enables the merchant reconcile the settled transactions with the settlement of the funds in the previous settlement cycle.
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
|
Basic Parameter | |||||
service |
String |
Service Name |
N |
forex_liquidation_file |
|
partner |
String(16) |
Partner ID. |
N |
2088001159940003 |
|
sign_type |
String |
Signature method. The following are supported. Must be uppercase. |
N |
RSA |
|
sign |
String |
Signature value. |
N |
e5815a4556db338ed237f7d3fd222184 |
|
Business Parameter |
|||||
start_date |
String |
The start date of the reconciliation period, formatted as YYYYMMDD |
N |
|
|
end_date |
String |
The end date of the reconciliation period, formatted as?? YYYYMMDD |
N |
|
The responses could be in different formats for different use cases
Order |
Field name |
Type |
Description |
1 | Partner transaction ID |
String(64) |
The? Unique transaction ID passed by the merchants in the payment transaction |
2 | Amount |
Number(8,2) |
The amount of fund in foreign currency. |
3 | Currency |
String(10) |
Abbreviated currency names. |
4 | Payment Time |
String(14) |
YYYYMMDDHHMMSS |
5 | Settlement Time |
String(14) |
YYYYMMDDHHMMSS |
6 | Transaction type |
String(1) |
Normal transaction: P |
7 | Service charge |
Number(8,2) |
The amount of service charge. |
8 | Status |
String(1) |
Normal transaction: |
9 | Remark |
String(255) |
An optional field. If the transaction is refund, the time of the refund request should be added into the remark field in YYYYMMDDHHMMSS format. |
10 | Split foreign currency amount |
Number(8,2) |
This trade's split foreigh currency amount or this refund's split refund foreigh currency amount. |
11 | Split RMB amount |
Number(8,2) |
This trade's split RMB amount or this refund's split refund RMB amount. |
https://mapi.alipay.com/gateway.do?sign_type=MD5&sendFormat=normal&sign=bb4c92c7cb7fc8a5280fe5f9f7ac309c&_input_charset=UTF-8&end_date=20150524&service=forex_liquidation_file&partner=2088002007018916&start_date=20150520
The response is HTTP response with an attached file, which is the settlement file with the transactions included.
The sample is for illustration of the browser download.
Error response from the biz logic:
File download failed: Over 10 days to Date period
Error response from the Gateway:
<?xml version="1.0" encoding="UTF-8"?>
<alipay>
<is_success>F</is_success>
<error>ILLEGAL_SIGN</error>
</alipay>
An example of settlement report file:
23342343423|102.32|USD|20070615090001|2007622090001|P|2.04|L|Liquidated
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Returned result |
Description |
Over limit balance amount record |
Exceed the maximum entries: 100000 |
System exception |
System exception |
Merchant ID incorrect |
Incorrect partner ID |
Finish date not ahead of today |
The end date could not be the future time |
No balance amount data in the period |
Do not have any trade during the period |
Over 10 days to date period |
Over 10 day limit for the request time span |
Finish date ahead of begin date |
The end date needs to be later than the begin date |
Illegal date period |
Null in date field |
Date format incorrect YYYYMMDD |
Incorrect format of the date ,YYYYMMDD |
Internet connected exception ,please try later |
Network exception |
If the calling parameters have error in it, Alipay MAPI gateway will capture it and display the errors. However, the control flow will stay at the Alipay side and will NOT return to the merchant’s site.
Returned result | Description |
SYSTEM_EXCEPTION |
Alipay system error |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_SIGN_TYPE |
Signature is of wrong type. |
ILLEGAL_PARTNER_EXTERFACE |
Service is not activated for this account |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect |
ILLEGAL_ENCRYPT |
Encryption is incorrect. |
ILLEGAL_USER |
User ID is incorrect. |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect. |
ILLEGAL_AGENT |
Agency ID is incorrect. |
HAS_NO_PRIVILEGE |
Has no right to visit. |
INVALID_CHARACTER_SET |
The character set is invalid. |
When system error occurs, please contact Global Merchant Technical Support to assist the error repair.
Returned result | Description |
SYSTEM_ERROR |
Alipay system error |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED |
The interface has been closed. |
To get the exchange rate from Alipay, the partners can call this API.
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
Basic Parameter |
||||
service |
String |
Service Name |
N |
forex_rate_file |
partner |
String(16) |
Partner ID. |
N |
2088001159940003 |
sign_type |
String |
Signature method. The following are supported. Must be uppercase. |
N |
RSA |
sign |
String |
Signature value. |
N |
e5815a4556db338ed237f7d3fd222184 |
The responses could be in different formats for different use cases
Order |
Field name |
Type |
Description |
1 |
Date |
String(8) |
Rate releasing date: YYYYMMDD |
2 |
Time |
String(6) |
Rate releasing time: HHMMSS |
3 |
Currency |
String(3) |
Abbreviated currency names. |
4 |
Rate |
String(10) |
|
https://mapi.alipay.com/gateway.do?sign_type=MD5&sendFormat=normal&sign=590a9fbbed8a5b9a86b426795445f9f0&service=forex_rate_file&partner=2088101122136241
20160504|100030|CHF|6.829600|
20160504|100030|EUR|7.491500|
20160504|100030|THB|0.185877|
20160504|100030|DKK|1.007800|
20160504|100030|SGD|4.815600|
20160504|100030|GBP|9.476100|
20160504|100030|HKD|0.838800|
20160504|100030|NOK|0.803000|
20160504|100030|CAD|5.124900|
20160504|100030|KRW|0.005814|
20160504|100030|NZD|4.496100|
20160504|100030|JPY|0.060934|
20160504|100030|AUD|4.877600|
20160504|100030|SEK|0.809800|
20160504|090530|USD|6.534600|
The response is HTTP response with an attached file, which is the FX rate file with the FX included.
The sample is for illustration of the browser download.
File download failed: Over 10 days to Date period
<?xml version="1.0" encoding="UTF-8"?>
<alipay>
<is_success>F</is_success>
<error>ILLEGAL_SIGN</error>
</alipay>
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Returned result |
Description |
System exception |
Alipay system error |
Merchant ID incorrect |
Invalid partner ID |
File empty |
Null content of the file |
If the calling parameters have error in it, Alipay MAPI gateway will capture it and display the errors. However, the control flow will stay at the Alipay side and will NOT return to the merchant’s site.
Returned result | Description |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_SIGN_TYPE |
Signature is of wrong type. |
ILLEGAL_PARTNER_EXTERFACE |
Service is not activated for this account |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect |
ILLEGAL_ENCRYPT |
Encryption is incorrect. |
ILLEGAL_USER |
User ID is incorrect. |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect. |
ILLEGAL_AGENT |
Agency ID is incorrect. |
HAS_NO_PRIVILEGE |
Has no right to visit. |
INVALID_CHARACTER_SET |
The character set is invalid. |
When system error occurs, please contact Global Merchant Technical Support to assist the error repair.
Returned result | Description |
SYSTEM_ERROR |
Alipay system error |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED |
The interface has been closed. |
Validate a notification is from Alipay Server, ensure the authenticity of the response data.
Acquire the parameter notify ID (notify_id), assemble it into a URL according to Alipay requirement, e.g.:
https://mapi.alipay.com/gateway.do?service=notify_verify&partner=2088002396712354¬ify_id=RqPnCoPT3K9%252Fvwbh3I%252BFioE227%252BPfNMl8jwyZqMIiXQWxhOCmQ5MQO%252FWd93rvCB%252BaiGg
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
|
Basic Parameter |
|||||
service |
String |
Service Name |
N |
notify_verify |
|
partner |
String(16) |
Partner ID. |
N |
2088001159940003 |
|
Business Parameter |
|||||
notify_id |
String(34) |
The ID of Alipay system’s notification. |
N |
The response is a string with the status.
If the input parameter is invalid, return,
Invalid
If the notification is from Alipay, and inquires in the valid time frame, (1 min)
True
If the notification is not from Alipay, or passes 1 min time frame,
False
https://intlmapi.alipay.com/gateway.do?service=notify_verify&partner=2088101122136241&notify_id=4465b04e84cb6bacc2bd1b52232c0b8gjg&sign=ciSBXc7gjCfXW8KMBxFiFH2cbMZtFelfTOGKqY2NF7q98RnH3E%2BiF5Cj%2Fu%2Bl8py1D%2FOsE%2FAva1ls8A6Tw1MzhG6ideJSgh4FxWmAjEnlczdfLj%2FqzA6qGzxdKGEXaSDFmTGglOembXUqK8g8ajICD%2BBH7xoxBRY7vtfylEXtojs%3D&sign_type=RSA
For the system API calls, in general, the validations are being done at two levels on Alipay side.
The first level is at the API gateway level, where it does certain sanity checks such as verifying the signature, verifying if the partner ID is valid or whether the partner has permission to call this particular API, etc. If the validation fails, Alipay would return the appropriate error codes which are classified as the 'API Gateway Error Codes' as in the below.
Once it passes the validations at the API gateway level, the API request would be dispatched to the internal system for further processing, which it would be subjected to the validations of the business logic. The corresponding error codes returned are classified as the 'Business Error Codes".
Returned result | Description |
SYSTEM_EXCEPTION |
Alipay system error |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_SIGN_TYPE |
Signature is of wrong type. |
If the calling parameters have error in it, Alipay MAPI gateway will capture it and display the errors. However, the control flow will stay at the Alipay side and will NOT return to the merchant’s site.
Returned result | Description |
SYSTEM_EXCEPTION |
Alipay system error |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_SIGN_TYPE |
Signature is of wrong type. |
ILLEGAL_PARTNER_EXTERFACE |
Service is not activated for this account |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect |
ILLEGAL_ENCRYPT |
Encryption is incorrect. |
ILLEGAL_USER |
User ID is incorrect. |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect. |
ILLEGAL_AGENT |
Agency ID is incorrect. |
HAS_NO_PRIVILEGE |
Has no right to visit. |
INVALID_CHARACTER_SET |
The character set is invalid. |
When system error occurs, please contact Global Merchant Technical Support to assist the error repair.
Returned result | Description |
SYSTEM_ERROR |
Alipay system error |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type. |
EXTERFACE_IS_CLOSED |
The interface has been closed. |
sudo apt-get install openssl
The developer can download Windows version of OpenSSL from the official site of https://www.openssl.org/source/.
$ openssl
OpenSSL> genrsa -out rsa_private_key.pem 1024 ##generating private key
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt ##transform private key into PKCS8 format
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem ##Generate public key
OpenSSL> exit
C:\Users\Hammer>cd C:\OpenSSL-Win32\bin ##enter OpenSSL directory
C:\OpenSSL-Win32\bin>openssl.exe ##enter OpenSSL
OpenSSL> genrsa -out rsa_private_key.pem 1024 ##generating private key
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt ##transform private key into PKCS8 format
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem ##Generate public key
OpenSSL> exit
After the above steps, the user could see two files under the current folder (C:\OpenSSL-Win32\bin for Windows), rsaprivatekey.pem and rsapublickey.pem.
The former is the private key while the latter is the public key. The merchant should keep the private key and exchange the public key with Alipay for signature verification. The following are the examples on how to use the key pair.
-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQC+L0rfjLl3neHleNMOsYTW8r0QXZ5RVb2p/vvY3fJNNugvJ7lo4+fdBz+LN4mDxTz4MTOhi5e2yeAqx+v3nKpNmPzC5LmDjhHZURhwbqFtIpZD51mOfno2c3MDwlrsVi6mTypbNu4uaQzw/TOpwufSLWF7k6p2pLoVmmqJzQiD0QIDAQABAoGAakB1risquv9D4zX7hCv9MTFwGyKSfpJOYhkIjwKAik7wrNeeqFEbisqv35FpjGq3Q1oJpGkem4pxaLVEyZOHONefZ9MGVChT/MNH5b0FJYWl392RZy8KCdq376Vt4gKVlABvaV1DkapL+nLh7LMo/bENudARsxD55IGObMU19lkCQQDwHmzWPMHfc3kdY6AqiLrOss+MVIAhQqZOHhDe0aW2gZtwiWeYK1wB/fRxJ5esk1sScOWgzvCN/oGJLhU3kipHAkEAysNoSdG2oWADxlIt4W9kUiiiqNgimHGMHPwp4JMxupHMTm7D9XtGUIiDijZxunHv3kvktNfWj3Yji0661zHVJwJBAM8TDf077F4NsVc9AXVs8N0sq3xzqwQD/HPFzfq6hdR8tVY5yRMb4X7+SX4EDPORKKsgnYcur5lk8MUi7r072iUCQQC8xQvUne+fcdpRyrR4StJlQvucogwjTKMbYRBDygXkIlTJOIorgudFlrKP/HwJDoY4uQNl8gQJb/1LdrKwIe7FAkBl0TNtfodGrDXBHwBgtN/t3pyi+sz7OpJdUklKE7zMSBuLd1E3O4JMzvWP9wEE7JDb+brjgK4/cxxUHUTkk592-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB-----END PUBLIC KEY-----
Contact Global Merchant Technical Support to upload the public key. Please sign with the matching private key in the key pair.
Merchants can check PID, Key, do refund, check/download transaction and settlement info on global.alipay.com:
Alipay sandbox gateway URL: https://openapi.alipaydev.com/gateway.do?
Merchant account on Sandbox:
PID:2088101122136241
Email Account:overseas_kgtest@163.com
MD5 KEY
MD5:760bdzec6y9goq7ctyx96ezkz78287de
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKQ5oPb0bAuwPqeBm01hBCiyAEg6q5hLqaHgVOZliuBsY49H9zupOhvCTPFMqV4IheggNqx1C3b2zik5egn/QdY3Y1SDKnWblVMRpdSxmasR1G6Jh6s2JPrgwAYMAnm+800otolXHIAP8Sryz9z9Kti9rtSNejSef/PEndsWTiCbAgMBAAECgYEAiD1q5RUXAYdgIxSpo0MF8UDibQmHS5wRiUKTDGRXFyG0YqyAVZVpqJfDvzcrFuCZPl5jHSUosrPDin2tWdfSZC6Hn7w+L89EwoekThUkSI6J6GPHSTiGssscBjN0RDjGH87KUmGsoDkgdwBFyG5krJOdCNjlWXnjSag6LFEusLkCQQDpqv4pqGKTSR70NjIFDeXIk8WfMuLFDQTG/Fl3JTt3ptBP0GNyNxZthgSz8+bVYz/udQU0Gx9UaG0guvpfKaKlAkEAs+ufKxFhGSk75+B93D8p6LXug568V3XmgbwsBD4+9zzG9K3PKZDaG+8Y0DCrh0wRXcGEn98xKu+6AOU0uomSPwJBAOQI2HMk/dZI1Kl1PklKb8XX2FNtoHq3IsNiP5kTv74cEEzjzDkJY5zM3kgTrWDvs9NtZf+cvG1uX5lCf9Zg1nUCQCBSGoTFGXlIo/9Sn6l6G1A3poI0eMcJYgA6Snn0qKEHZQI9WvKvl87e08lKhPXIH3KFOgryMEXzTKmugxtjbUcCQDrpXHpYy7MAIcUFpXRWV6BeA/JX3NRugCX6n5NwBrLY+CASViyYctPqnTUKXEz9yRXycuTBdyFr0zJmCxfgKQw=
Private Key in pkcs8 format for Java:
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI7Xh680MTnfYDxwyzSqKMhKWed3UP64YMaDkHgBtgCk3odFjoMcDTDumZqeiC1hVICVFR94blrq1ZhxQnFS+UqhXkPbyzuiPZQVBGaZ42y8brGuFiGJVjlo7Sf6GMc14a0d+bLD0C13faGK7PV0YQ7A1xaIIn/fn/Uk4qpOWEhhAgMBAAECgYBO2ZkT1RrLWIxWMOlrY/bpQWnJhSrXwU3ip2OLa15dkqUoRPQ7WbPKbBusp5CChHTSGfm0CpXYaEOKSBMmXWgwuz767/EEpaJfep3OPmKGD+kGPdA3qDYfTMCGRXSX1J47kjLa9XQX6iBmUMAzvTrLS9lZlXPKDhmU6bNZdODH1QJBAO1I/TIcjq7Fd0lwmXigbCs52suZP6/JEVpy6dSVPbZubCnJY3JbG044TN/2Ve4PzMNhmt367k46COpN6Oh1gAMCQQCaG6S2+NL9HTPD2RYmLKF8mXwcYD20WH2qsEGSVZwZma1CzbiwgY0MCUyXue0T/RabkU+oj0v679qy5AtkuULLAkEAzuliwJveX9CZYFTrvyBEsrzUac3Ml0DB/RlPhaxOEBLiBt4x9bo0aVT21CU+cUUdzRIDtaXmwBgjRg2CF5K+eQJAHAZW5+dMBzeeSElcG8kV/OC0jzx5PCizgazX39KttoIZ3gInSgHlMoEmapknIfFugQ/l2pNkj9e6f7m00LZYDQJBAOBCfnJmeppAA07ws2FzfvR880+rYc1gI95BSKK4ZLMoO2w+4k/NQ15K6MqlqwFNzTJq0HBf1MryUcuuASx0sQs=
Public Key:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCO14evNDE532A8cMs0qijISlnnd1D+uGDGg5B4AbYApN6HRY6DHA0w7pmanogtYVSAlRUfeG5a6tWYcUJxUvlKoV5D28s7oj2UFQRmmeNsvG6xrhYhiVY5aO0n+hjHNeGtHfmyw9Atd32hiuz1dGEOwNcWiCJ/35/1JOKqTlhIYQIDAQAB
Buyer Accounts:
Captcha Code: 8888
Login Password: 111111
Payment Password on Payment Page: 111111
Abbreviation |
Currency |
Decimal Number |
AUD |
Australian Dollar |
2 |
CAD |
Canadian Dollar |
2 |
CHF |
Confederation Helvetica Franc |
2 |
DKK |
Danish Krone |
2 |
EUR |
Euro |
2 |
GBP |
British Sterling |
2 |
HKD |
Hong Kong Dollar |
2 |
JPY |
Japanese Yen |
0 |
KRW |
Korean Won |
0 |
NOK |
Norwegian Krone |
2 |
NZD |
New Zealand Dollar |
2 |
SEK |
Swedish Krona |
2 |
SGD |
Singapore Dollar |
2 |
THB |
Thai Baht |
2 |
USD |
U.S. Dollar |
2 |
This guide is written for application developers who want to integrate Alipay cross-border WAP payment solution. Implementing this solution requires software development skills. You must write code that uses the API request and reply fields to integrate Alipay cross-border WAP payment solution into your existing order management system.
Alipay (Chinese: 支付宝) is a third-party mobile and online payment platform. Alipay cross-border WAP (Wireless Application Protocol) payment is a solution designed for mobile payment, which gives your buyers a simplified and secure payment experience that keeps them loyal to your website throughout the payment process. Once integrated the Alipay WAP payment service, you should present an Alipay payment button on your page for the consumer to complete the payment and check out.
The AlipayHK system has implemented the White List mechanism, and the partner needs to notify AlipayHK of its public IPs. Then, we will release a username together with password to the partner to test the accessibility and reconciliation file parsing/cron job. If these testings are successful, the partner can push the system to the production.
The settlement zip file contains multiple settlement files and one settlement batch file.
Alternatively, the partner also can manually access the merchant’s dashboard to download the reconciliation and settlement report. However, there will no indicator of the payment APP used by the buyer.
The file naming rule is:
The transaction file contains a list of the following fields:
No. |
Field |
Type(Byte) |
Description |
1 |
Partner_transaction_id |
String(64) |
A numbered transaction ID(unique in partner system)it is equal to “partner_trans_id” when transaction type is in (payment,reversal,reverse); it is equal to “partner_refund_id” when transaction type is refund |
2 |
Transaction_id |
String(64) |
A numbered transaction ID (Unique inside the Alipay system) |
3 |
Amount |
Number(9,2) |
Amount in list currency/refund amount in list currency |
4 |
Fee |
Number(9,2) |
Commission fee |
6 |
Settlement |
Number(9,2) |
Settlement amount in list currency |
7 |
Currency |
String(8) |
The currency given in the transaction request. |
8 |
Payment_time |
String(19) |
The time of transaction; Format: YYYY-MM-DD HH:MM:SS |
9 |
Settlement_time |
String(19) |
The time of settlment; Format: YYYY-MM-DD HH:MM:SS |
10 |
Issue |
String |
Indicator of wallet version: ALIPAYCN : Alipay ALIPAYHK: AlipayHK |
11 |
Product |
String |
Identifier for different Alipay products. Alipay and AlipayHK wap and sdk payment: Cross_wap |
12 |
Type |
String(8) |
Transaction type: R: refund |
13 |
Status |
String(1) |
Normal transaction: |
14 |
Remarks |
String(256) |
Remarks |
15 |
original_partner_transaction_ID |
String(64) |
Original partner transaction ID. In the payment request, the value of this field is NULL. In the refund request, the value of this field is the same as that for the partner_transaction_ID of the original transaction in the corresponding payment request. |
Record Detail
Partner_transaction_id,Transaction_id,Amount,Fee,Settlement,Currency,Payment_time,Settlement_time,Issue,Product,Type,Status,Remarks,Original_partner_transaction_ID 6276895309058723 ,2017050221001003140213828085 ,0.10,0.00,,0.10,HKD,2017-05-02 14:41:14,2017-05-23 15:36:00,ALIPAYCN,Cross_wap,P,P,test1, 4133645818053569 ,2017050221001003360298122050 ,1.00,0.01,,0.99,HKD,2017-05-02 15:31:38,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,P,test2, 3408856710504544 ,2017050221001003360298148619 ,0.99,0.01,,0.98,HKD,2017-05-02 15:46:35,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,P,test3, 7520065377778011 ,2017050221001003360298148081 ,1.99,0.02,,1.97,HKD,2017-05-02 15:55:08,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,P,test4, 4688343898644090 ,2017050221001003360298193131 ,1.00,0.01,,0.99,HKD,2017-05-02 16:16:15,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,P,test5, 5433317664128301 ,2017050221001003360298193495 ,1.00,0.01,,0.99,HKD,2017-05-02 16:21:18,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,P,test6, 3179751587946773 ,2017050221001003140213828085 ,-0.10,0.00,,-0.10,HKD,2017-05-02 16:54:07,2017-05-23 15:36:00,ALIPAYCN,Cross_wap,R,P,test_refund1,6276895309058723 |
The settlement zip file contains one settlement batch file and multiple settlement files.
The settlement batch file contains a list of the following fields:
No. |
Field |
Type(Byte) |
Description |
1 |
Settle_batch_no |
String(32) |
The total settlment may be done in multiple batches. This field indicates the id of a single settlement batch. |
2 |
Settle_date |
String(19) |
The time of settlement of the batch; Format: YYYY-MM-DD HH:MM:SS |
3 |
Amount |
Number(9,2) |
Total Amount in list currency of the batch |
4 |
Fee |
Number(9,2) |
Total Commission fee in the list currency of the batch |
5 |
Settlement |
Number(9,2) |
Total Settlement amount in list currency of the batch |
6 |
Currency |
String(8) |
The settlement currency of the batch |
Record Detail
An example of file content:
Settle_batch_no,Settle_date,Amount,Fee,Settlement,Currency 50002017051900000000000000000000 ,2017-05-23 15:36:00,852.40 ,8.52 ,843.88 ,HKD |
The single settlment file contains a list of the following fields:
No. |
Field |
Type(Byte) |
Description |
1 |
Partner_transaction_id |
String(64) |
A numbered transaction ID(unique in partner system)it is equal to “partner_trans_id” when transaction type is in (payment,reversal,reverse); it is equal to “partner_refund_id” when transaction type is refund |
2 |
Transaction_id |
String(64) |
A numbered transaction ID (Unique inside the Alipay system) |
3 |
Amount |
Number(9,2) |
Amount in list currency/refund amount in list currency |
4 |
Fee |
Number(9,2) |
Commission fee |
5 |
Settlement |
Number(9,2) |
Settlement amount in list currency |
6 |
Currency |
String(8) |
The currency given in the transaction request. |
7 |
Payment_time |
String(19) |
The time of transaction; Format: YYYY-MM-DD HH:MM:SS |
8 |
Settlement_time |
String(19) |
The time of settlment; Format: YYYY-MM-DD HH:MM:SS |
9 |
Issue |
String |
Indicator of wallet version: ALIPAYCN : Alipay ALIPAYHK: Alipay HK |
10 |
Product |
String |
Identifier for different Alipay products. Alipay and Alipay HK wap and sdk payment: Cross_wap |
11 |
Type |
String(8) |
Transaction type: R: refund |
12 |
Status |
String(1) |
Normal transaction: |
13 |
Remarks |
String(256) |
Remarks |
14 |
original_partner_transaction_ID |
String(64) |
Original partner transaction ID. In the payment request, the value of this field is NULL. In the refund request, the value of this field is the same as that for the partner_transaction_ID of the original transaction in the corresponding payment request. |
Record Detail
An example of file content:
Partner_transaction_id,Transaction_id,Amount,Fee,Distribute_amount,Settlement,Currency,Payment_time,Settlement_time,Issue,Product,Type,Status,Remarks,Original_partner_transaction_ID FOREXTRADE_2017051800000001 ,2017051800000000000000000001 ,1.00,0.01,0.99,HKD,2017-05-18 11:49:44,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test1, FOREXTRADE_2017051800000002 ,2017051800000000000000000002 ,1.00,0.01,0.99,HKD,2017-05-18 13:15:37,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test2, FOREXTRADE_2017051800000003 ,2017051800000000000000000003 ,2.00,0.02,1.98,HKD,2017-05-18 17:59:25,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test3, FOREXREFUND_2017051800000001 ,2017051800000000000000000001 ,-1.00,-0.01,-0.99,HKD,2017-05-18 18:02:10,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,R,L,test_refund1,FOREXTRADE_2017051800000001 FOREXREFUND_2017051900000001 ,2017051800000000000000000002 ,-0.60,-0.01,-0.59,HKD,2017-05-19 10:46:03,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,R,L,test_refund2,FOREXTRADE_2017051800000002 FOREXTRADE_2017051900000001 ,2017051900000000000000000001 ,100.00,1.00,99.00,HKD,2017-05-19 10:53:40,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test4, FOREXTRADE_2017052200000001 ,2017052200000000000000000001 ,100.00,1.00,99.00,HKD,2017-05-22 11:06:46,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test5, FOREXTRADE_2017052200000002 ,2017052200000000000000000002 ,100.00,1.00,99.00,HKD,2017-05-22 11:09:11,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test6, FOREXTRADE_2017052200000003 ,2017052200000000000000000003 ,50.00,0.50,49.50,HKD,2017-05-22 12:54:19,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test7, FOREXTRADE_2017052200000004 ,2017052200000000000000000004 ,500.00,5.00,495.00,HKD,2017-05-22 14:05:58,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test8, FOREXTRADE_2017052200000005 ,2017052200000000000000000005 ,1000.00,10.00,990.00,HKD,2017-05-22 14:08:46,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,P,L,test9, FOREXREFUND_2017052200000001 ,2017052200000000000000000004 ,-500.00,-5.00,-495.00,HKD,2017-05-22 17:13:43,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,R,L,test_refund3,FOREXTRADE_2017052200000004 FOREXREFUND_2017052200000002 ,2017052200000000000000000002 ,-100.00,-1.00,-99.00,HKD,2017-05-22 17:16:04,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,R,L,test_refund4,FOREXTRADE_2017052200000002 FOREXREFUND_2017052200000003 ,2017052200000000000000000005 ,-400.00,-4.00,-396.00,HKD,2017-05-22 17:17:48,2017-05-23 15:36:00,ALIPAYHK,Cross_wap,R,L,test_refund5,FOREXTRADE_2017052200000005 |
Please contact us to obtain SandBox testing info.
Call this interface to register online secondary merchants information into Alipay system. For frequently asked questions about this interface, see About the alipay.overseas.secmerchant.online.maintain API.
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
|
Basic Parameter |
|||||
service |
String |
Service Name |
N |
alipay.overseas.secmerchant.online.maintain |
|
partner |
String(16) |
A unique partner ID to identify a contracted Alipay Account. A 16 digit number starts with 2088. |
N |
2088101142878662 |
|
_input_charset |
String |
The charset on partner website, such as utf-8, gbk, gb2312 etc. |
N |
gbk |
|
sign_type |
String |
DSA, RSA, or MD5, capital letter |
N |
MD5 |
|
sign |
String |
The value of sign. |
N |
2118ac8fad6bc1d9e88a6cd017c18d37 |
|
timestamp |
String |
The time when the merchant server sends request, in GMT + 8, format: yyyy-MM-dd HH:mm:ss. By default, the request expires in 30 minutes. |
N |
2012-12-21 17:11:16 |
|
Business Parameter |
|||||
secondary_merchant_name |
String(64) |
Registration legal name of the secondary merchant, which is shown in the wallet and reconciliation file to identify a secondary merchant. Note: If the secondary merchant type is INDIVIDUAL, specify the full legal name of the business owner to this field. |
N |
Alipay.com Co.,Ltd |
|
secondary_merchant_id |
String(64) |
A unique ID assigned by the partner to identify a secondary merchant. The ID can contain letters, numbers, and underscores. |
N |
63472327348 |
|
secondary_merchant_industry |
String(4) |
Business category code of the secondary merchant. See MCC list. |
N |
||
register_country |
String(2) |
Registration country of the secondary merchant, specified by a 2-letter code defined in ISO 3166. For more details about the 2-letter country code, see ISO 3166. |
N |
HK |
|
register_address |
String(256) |
Business registration address specified on the business registration document. Use mailing address format. |
N |
No.278, Road YinCheng, Shanghai, China |
|
site_infos |
String |
This field is in JSON format and can contain up to 5 website URLs or app download URLs. See site_infos for details. URLs in this field cannot be updated incrementally. To add or remove URLs, re-pass the value again. |
N |
Secondary merchant website URL or app download URL. Format: [{"site_type":"WEB","site_url":"https://alipay.com","site_name":"websit"}, {"site_type":"APP","site_url":"https://alipay.com","site_name":"websit"}] |
|
secondary_merchant_type |
String |
Secondary merchant type, the value can be INDIVIDUAL for the sole proprietorship or ENTERPRISE for the limited company, private company, partnership, limited liability partnership (LLP), limited liability company (LLC), S corporation (S Corp), C corporation (C Corp), trust, or nonprofit organization (NPO) |
N |
INDIVIDUAL |
|
registration_no |
String(128) |
Business registration number specified on the business registration document. Note: This field is not required when the secondary merchant type is INDIVIDUAL and no registration number exists. |
N |
012345678 |
|
shareholder_name |
String(128) |
Legal name of the primary shareholder of the secondary merchant. Specify this field only when the secondary merchant type is ENTERPRISE. |
Y |
Jack Li (if the shareholder is an individual), Alipay.com Co.,Ltd (if the shareholder is an enterprise) |
|
shareholder_id |
String(128) |
ID or passport number, or business registration number of the primary shareholder of the secondary merchant. Specify this field only when the secondary merchant type is ENTERPRISE. |
Y |
G53453888 (if the shareholder is an individual), 012345678 (if the shareholder is an enterprise) |
|
representative_name |
String(128) |
Full legal name of the business owner. Specify this field only when the secondary merchant type is INDIVIDUAL. This field is optional if the secondary merchant type is ENTERPRISE. |
N |
Tom Li |
|
representative_id |
String(128) |
ID or passport number of the business owner. Specify this field only when the secondary merchant type is INDIVIDUAL. This field is optional if the secondary merchant type is ENTERPRISE. |
N |
123456789 |
|
settlement_no |
String(64) |
Settlement bank account number of the secondary merchant, letters and numbers only |
N |
2600100000 |
|
contact_no |
String(64) |
Contact phone number of the secondary merchant, numbers and special characters +-() only |
N |
+86139xxxx7893 |
|
contact_email |
String(128) |
Contact email address of the secondary merchant |
N |
tomli@gmail.com |
|
cs_no |
String(64) |
Customer service phone number of the secondary merchant, numbers and special characters +-() only |
Y |
0213355xxx89 |
|
cs_email |
String(128) |
Customer service email address of the secondary merchant |
Y |
customerservice@xxxcompany.com |
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
site_type |
String |
Site type. Website URL must be WEB, and app download URL must be APP. Use uppercase. |
N |
WEB |
site_url |
String(256) |
Site URL. |
N |
site_name |
String(512) |
Site name |
Y |
xx Store |
Some parameters of String type have no length limit and the system will not check their length.
The response is in XML format.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
|
Basic Parameter |
|||||
is_success |
String |
Request succeeds or not. Successful request does not mean the business request is accepted and processed successfully. |
N |
T |
|
sign_type |
String |
The value can be one of DSA, RSA, or MD5. Uppercase must be used. |
Y |
MD5 |
|
sign |
String |
The value of sign |
Y |
3afc92ac4708425ab74ecb2c4e58ef56 |
|
error |
String |
|
Y |
PARAM_ILLEGAL |
|
result_code |
String |
Request result code. This field is returned only when the is_success field is T. |
Y |
SUCCESS |
The synchronous response may have more parameters due to the upgrade on the Alipay server side. You can ignore parameters that are not included in this API document.
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>T</is_success>
<request>
<param name="secondary_merchant_industry">5935</param>
<param name="_input_charset">UTF-8</param>
<param name="sign">8457f906bf89a5e444a6e5c28f8da499</param>
<param name="site_infos">
[{"site_type":"WEB","site_url":"https://alipay.com","site_name":"websit"}]
</param>
<param name="secondary_merchant_id">100510000031</param>
<param name="register_address">No.278, Road YinCheng, Shanghai, China</param>
<param name="partner">2088131089302823</param>
<param name="service">alipay.overseas.secmerchant.online.maintain</param>
<param name="secondary_merchant_name">test1</param>
<param name="register_country">HK</param>
<param name="sign_type">MD5</param>
<param name="timestamp">2018-10-09 16:04:16</param>
<param name="secondary_merchant_type">INDIVIDUAL</param>
<param name="registration_no">012345678</param>
<param name=“representative_name”>Tom Li</param>
<param name=“representative_id”>123456789 Li</param>
<param name="settlement_no">2600100000</param>
<param name="contact_no">+86139xxxx7893 </param>
<param name="contact_email">tomli@gmail.com </param>
</request>
<response>
<alipay>
<result_code>SUCCESS</result_code>
</alipay>
</response>
<sign>744a87f0e3b40e6a8cd8f9705ce61511</sign>
<sign_type>MD5</sign_type>
</alipay>
<alipay>
<is_success>F</is_success>
<error>PARAM_ILLEGAL</error>
<sign>ba101b7ffb43afde9ba63c0de335218e</sign>
<sign_type>MD5</sign_type>
</alipay>
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>F</is_success>
<error>ILLEGAL_PARTNER</error>
</alipay>
Returned result |
Description |
MCC_CAN_NOT_MODIFY |
The MCC passed in cannot match the original MCC. Please ensure that the passed MCC is the original MCC. |
REGISTER_COUNTRY_FORBIDDEN |
For anti-money laundering reasons, the country or region in register_country cannot be registered. |
PARAM_ILLEGAL |
The parameter is illegal. The parameter is too long, parameter format is wrong, or a required parameter is not passed. Please check and rectify the parameter according to the API document. |
SYSTEM_ERROR |
Alipay system error |
DUPLICATE_REQUEST |
Duplicate request submitted. The previous registration request is still in process. |
MERCHANT_TYPE_ILLEGAL |
Illegal secondary merchant type. The value of the secondary_merchant_type field can only be ENTERPRISE or INDIVIDUAL. |
Returned result |
Description |
ILLEGAL_SIGN |
Illegal signature |
ILLEGAL_DYN_MD5_KEY |
Dynamic key information is incorrect |
ILLEGAL_ENCRYPT |
Encryption is incorrect |
ILLEGAL_ARGUMENT |
Incorrect parameter |
ILLEGAL_SERVICE |
Service Parameter is incorrect |
ILLEGAL_USER |
User ID is incorrect |
ILLEGAL_PARTNER |
Incorrect Partner ID |
ILLEGAL_EXTERFACE |
Interface configuration is incorrect |
ILLEGAL_PARTNER_EXTERFACE |
Partner's interface information is incorrect |
ILLEGAL_SECURITY_PROFILE |
Matching private key configuration is not found |
ILLEGAL_AGENT |
Agency ID is incorrect |
ILLEGAL_SIGN_TYPE |
The signature type is incorrect |
ILLEGAL_CHARSET |
The character set is illegal |
HAS_NO_PRIVILEGE |
Has no right to visit |
INVALID_CHARACTER_SET |
The character set is invalid |
When system error occurs, please contact Global Merchant Technical Support .
Returned result |
Description |
SYSTEM_ERROR |
Alipay system error |
SESSION_TIMEOUT |
Session timeout |
ILLEGAL_TARGET_SERVICE |
Wrong target service |
ILLEGAL_ACCESS_SWITCH_SYSTEM |
Merchant is not allowed to visit system of this type |
EXTERFACE_IS_CLOSED |
The interface is closed |
Date |
Modifications |
2019.02.18 |
|
2019.02.28 |
Added the result_code field in the Sync Response part. |
The following business flow shows how an Alipay payment integration works. The process involves the customer, the merchant, and Alipay.
The payment service name is: create_forex_trade.
For a transaction that has been successfully paid, the customer can request the merchant for refunding as long as the refunding period is still valid, and you can make use of the refunding interface to complete the refunding, as illustrated.
You can query a transaction by sending a query request.
The query service name is: single_trade_query.
To generate a digital signature, normally a key is required to sign the data. You must prepare the MD5 private key or the RSA/DSA private and public key pair to generate and verify a digital signature.
MD5 private key is required for generating and verifying MD5 signatures. The MD5 secret key is the 32-byte string which is composed of English letters and numbers. You can log in to the Global Portal to view the private key:
An RSA/DSA key pair contains the private key and the public key. The private key is required for generating the signature, while the public key is used for verifying the signature. The following steps assume that you are using RSA sign type, similar steps applied for generating and uploading DSA key pair.
Generating the private/public key pairMany tools can be used to generate the RSA key pair. The following example illustrates the steps to generate the RSA key pair by using OpenSSL.
sudo apt-get install openssl
$ openssl
OpenSSL> genrsa -out rsa_private_key.pem 1024 ##generating private key
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt ##transform private key into PKCS8 format
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem ##Generate public key
OpenSSL> exit
C:\Users\Hammer>cd C:\OpenSSL-Win32\bin ##enter OpenSSL directory
C:\OpenSSL-Win32\bin>openssl.exe ##enter OpenSSL
OpenSSL> genrsa -out rsa_private_key.pem 1024 ##generating private key
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt ##transform private key into PKCS8 format
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem ##Generate public key
OpenSSL> exit
After that, you can see two files under current folder, rsaprivatekey.pem and rsapublickey.pem. The former is the private key and the latter is the public key.
Notes:The following are the examples of the key pair:
-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQC+L0rfjLl3neHleNMOsYTW8r0QXZ5RVb2p/vvY3fJNNugvJ7lo4+fdBz+LN4mDxTz4MTOhi5e2yeAqx+v3nKpNmPzC5LmDjhHZURhwbqFtIpZD51mOfno2c3MDwlrsVi6mTypbNu4uaQzw/TOpwufSLWF7k6p2pLoVmmqJzQiD0QIDAQABAoGAakB1risquv9D4zX7hCv9MTFwGyKSfpJOYhkIjwKAik7wrNeeqFEbisqv35FpjGq3Q1oJpGkem4pxaLVEyZOHONefZ9MGVChT/MNH5b0FJYWl392RZy8KCdq376Vt4gKVlABvaV1DkapL+nLh7LMo/bENudARsxD55IGObMU19lkCQQDwHmzWPMHfc3kdY6AqiLrOss+MVIAhQqZOHhDe0aW2gZtwiWeYK1wB/fRxJ5esk1sScOWgzvCN/oGJLhU3kipHAkEAysNoSdG2oWADxlIt4W9kUiiiqNgimHGMHPwp4JMxupHMTm7D9XtGUIiDijZxunHv3kvktNfWj3Yji0661zHVJwJBAM8TDf077F4NsVc9AXVs8N0sq3xzqwQD/HPFzfq6hdR8tVY5yRMb4X7+SX4EDPORKKsgnYcur5lk8MUi7r072iUCQQC8xQvUne+fcdpRyrR4StJlQvucogwjTKMbYRBDygXkIlTJOIorgudFlrKP/HwJDoY4uQNl8gQJb/1LdrKwIe7FAkBl0TNtfodGrDXBHwBgtN/t3pyi+sz7OpJdUklKE7zMSBuLd1E3O4JMzvWP9wEE7JDb+brjgK4/cxxUHUTkk592-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB-----END PUBLIC KEY-----
This flow only applies for the acquirer. If you are an acquirer, you can use this flow to register online secondary merchants information into AlipayHK system.
The secondary merchant maintenance service name is: alipay.overseas.secmerchant.online.maintain.
Take JAVA demo code using MD5 signature algorithm as an example. Import the demo code project into your IDE tool, like Eclipse, then run:
Click payment button to pay:
Login to Alipay:
Input payment password to pay:
Payment success:
Buyer is brought back to the merchant's website after payment according to parameter return_url.
You can integrate the demo code or write your own code and run in Alipay production environment. If you use demo code, change the following settings:
Go to Alipay Merchant Portal and log in with your user ID. Click My Technical Service after login. You can check your PID and MD5 Key.
The MD5 Key can be used when you apply Alipay solutions in your online/offline store. To check this Key, you will need to enter your payment password.
After entering the password, you can get an MD5 Key:
The PID is an identification number that is used frequently when you are using Alipay solutions. This PID is tied to the Email which you used to login merchant portal. You can always check your PID here when you forgot.
The RSA key is not provided on Alipay Merchant Portal and need to be created it by using the OpenSSL tool. After you create the RSA keys, you need to send the RSA public key to overseas_support@service.alibaba.com and Alipay support team will help you upload the key.
Change the account and key to your real account and key in the AlipayConfig.java file.
In addition to the API response through the page redirect, the API response might also be sent to the partner asynchronously with the POST method if the merchant set 'notify_url' field in the request with the targeted URL to handle the asynchronous notification. Handling async notification is required for this payment solution.
Alipay would retry the sending asynchronous notification multiple times within a 25-hour window until the partner acknowledges the receipt of the notification by sending a string 'Success' in the response. The merchant needs to respond to avoid the further re-send of the async notification.
When handling the API response through the page redirect and the asynchronous notification, the following aspects should be considered:
Parameter |
Type (length in bytes) |
Description |
Example |
Basic Parameter |
|||
sign_type |
String |
Signature method. The following are supported. Must be uppercase. |
RSA |
sign |
String |
Signature value. |
e5815a4556db338ed237f7d3fd222184 |
Business Parameter |
|||
notify_type |
String |
Notification type, value: trade_status_sync. |
trade_status_sync |
notify_id |
String(34) |
The ID for a particular notification. It can be used by the partner system to verify the notification |
92c60707dc43a5b2d648b7b4d3c2e1592g |
notify_time |
Timestamp |
Time (Alipay’s time zone): YYYY-MM-DD hh:mm:ss |
2015-06-30 09:56:02 |
trade_status |
String(32) |
One of following two values: |
TRADE_FINISHED |
trade_no |
String(64) |
Alipay Transaction ID. Max length is 64 and min length is 16. |
2015070800001000100080029361 |
out_trade_no |
String(64) |
out_trade_no passed in by the merchant in the request |
2525759240575424 |
currency |
String(3) |
Currency code. |
HKD |
total_fee |
Number(8,2) |
The amount of the payment |
11.00 |
https://www.namesilo.com/alipay_ipn.php?notify_id=92c60707dc43a5b2d648b7b4d3c2e1592g¬ify_type=trade_status_sync&sign=***&trade_no=2015063000001000080055080394&total_fee=7.99&out_trade_no=9677726c8757aea6d4df81091811b047¤cy=HKD¬ify_time=2015-06-30 09:56:02&trade_status=TRADE_FINISHED&sign_type=MD5
http://www.namesilo.com/alipay_ipn.php?notify_id=0578bc470961e3b43fb676db616711fd2k¬ify_type=trade_status_sync&sign=***&trade_no=2015061700001000100000583330&total_fee=11.00&out_trade_no=2082389608326064¤cy=HKD¬ify_time=2015-06-17+02%3A37%3A02&trade_status=TRADE_CLOSED&sign_type=RSA
Trigger condition name |
Description on trigger condition |
Note |
TRADE_FINISHED |
Trade successfully |
true (trigger nofitication) |
WAIT_BUYER_PAY |
Trade creation |
false (does not trigger nofitication) |
TRADE_CLOSED |
Trade closed |
true (trigger nofitication) |
For the interest of system’s healthiness, it is recommended that the partner verifies if the notification is from Alipay.
The partner can only verify the notifications sent within the last 1 minute, and before sending the ‘Success’ acknowledgement back to Alipay.
For example:
https://intlmapi.alipay.com/gateway.do? service=notify_verify&partner=2088101122136241¬ify_id=+4465b04e84cb6bacc2bd1b52232c0b8gjg&sign=ciSBXc7gjCfXW8KMBxFiFH2cbMZtFelfTOGKqY2NF7q98RnH3E%2BiF5Cj%2Fu%2Bl8py1D%2FOsE%2FAva1ls8A6Tw1MzhG6ideJSgh4FxWmAjEnlczdfLj%2FqzA6qGzxdKGEXaSDFmTGglOembXUqK8g8ajICD%2BBH7xoxBRY7vtfylEXtojs%3D&sign_type=RSA
For more details, please refer to the API document of notify_verify.When you are dealing with a transaction, you will be in one of the following transaction status:
Only when your transaction is in the final status of TRADE_FINISHED or TRADE_CLOSED, your system can avoid many problems.
Best practice for you to keep transactions in the final status:
The Alipay returned error codes can be divided to the following types:
Idempotence means that in response to the same requests sent multiple times, Alipay should send back only one unique result.
Alipay checks the idempotence for payments and refunds. See details as below:
Because HTTPS requests depend on network stabilities, timeout might occur on PAY, QUERY, CANCEL and REFUND interface requests. At the same time, Alipay might return SYSTEM_ERROR for internal system problems. In both cases, partners can retry or query to get aligned with the final transaction status in Alipay.
Retry with the same parameter till get a result. If the retry exceeds the max times allowed, alarms will be triggered to notify the technical support team of the partner to check. If the retry results are always SYSTEM_ERROR, contact Alipay Technical Support for help.
a) Retry with the same parameter till get a result. If the retry exceeds the max times allowed, alarms will be triggered to notify the technical team of the partner to check. If the retry results are always SYSTEM_ERROR, contact Alipay Technical Support for help.
b) If timeout or SYSTEM_ERROR returned, call the QUERY interface to obtain the status, if QUERY timeout again, call CANCEL to close the transaction.
The following table lists the differences of using method a and method b:
Alipay status | Retry PAY interface | Retry QUERY interface |
SYSTEM_ERROR | SYSTEM_ERROR | TRADE_NOT_EXIST |
WAIT_BUERY_PAY | UNKNOW | WAIT_BUERY_PAY |
TRADE_SUCCESS | TRADE_SUCCESS | TRADE_SUCCESS |
TRADE_CLOSED | TRADE_CLOSED | TRADE_CLOSED |
Call this interface to query the registration status of secondary merchants.
Environment | HTTPS request URL |
---|---|
Production environment | https://intlmapi.alipay.com/gateway.do |
Test environment | https://mapi.alipaydev.com/gateway.do |
If you want to use Alipay sandbox to test the integration, see the sandbox handbook for details.
Parameter |
Type (length in bytes) |
Description |
Optional |
Example |
|
Basic Parameter |
|||||
service |
String |
Service Name |
N |
alipay.overseas.secmerchant.maintain.queryStatus |
|
partner |
String(16) |
A unique partner ID to identify a contracted Alipay Account. A 16 digit number starts with 2088. |
N |
2088101142878662 |
|
_input_charset |
String |
The charset on partner website, such as utf-8, gbk, gb2312 etc. |
N |
gbk |
|
sign_type |
String |
DSA, RSA, or MD5, capital letter |
N |
MD5 |
|
sign |
String |
The value of sign |
N |
2118ac8fad6bc1d9e88a6cd017c18d37 |
|
timestamp |
String |
The time when the merchant server sends request, in GMT + 8, format: yyyy-MM-dd HH:mm:ss. By default, the request expires in 30 minutes. |
N |
2019-02-01 08:30:10 |
|
Business Parameter |
|||||
secondary_merchant_id |
String(64) |
Secondary merchant ID, need to be unique for each PID |
N |
MERCHANT_ID_0003 |
|
payment_method |
String |
Payment method of the secondary merchant, the value is ONLINE_PAYMENT for online payments. |
N |
ONLINE_PAYMENT |
The response is in XML format.
Parameter |
Type (bytes) |
Description |
Optional |
Example |
sign |
String |
The value of sign |
Y |
744a87f0e3b40e6a8cd8f9705ce61511 |
sign_type |
String |
DSA, RSA, or MD5, capital letter |
Y |
MD5 |
secondary_merchant_id |
String |
Secondary merchant ID, need to be unique for each PID |
N |
MERCHANT_ID_0003 |
status |
String |
Registration status of the secondary merchant, the value can be SUCCESS if the merchant is successfully registered, UNDER_REVIEW if the application for registration is in process, and FAILED if the merchant is not registered. |
N |
SUCCESS |
reject_reason |
String |
The reason that the merchant is not registered successfully. This field is required when status is FAILED. |
Y |
High risk merchant, registration reject. |
Returned result |
Description |
Solution |
PARAM_ILLEGAL |
Required parameters are not entered or illegal parameters entered. The illegal parameter might be too long, or with incorrect format. |
Enter the correct parameters and send the request again. |
DATA_NOT_EXIST |
No data exists for the queried secondary merchant because the merchant is not registered. |
Register the secondary merchant to Alipay system before you query the registration status. |
SYSTEM_ERROR |
Alipay system error |
Please try again later. |
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>T</is_success>
<request>
<param name="service">alipay.overseas.secmerchant.maintain.queryStatus</param>
<param name="partner">2088101131367863</param>
<param name=“_input_charset”>gbk</param>
<param name="sign_type">MD5</param>
<param name="sign">2118ac8fad6bc1d9e88a6cd017c18d37</param>
<param name="timestamp">2019-02-01 08:30:10</param>
<param name="secondary_merchant_id">MERCHANT_ID_0003</param>
<param name="payment_method">ONLINE_PAYMENT</param>
</request>
<response>
<alipay>
<secondary_merchant_id>MERCHANT_ID_0003</secondary_merchant_id>
<status>UNDER_REVIEW</status>
</alipay>
</response>
<sign>744a87f0e3b40e6a8cd8f9705ce61511</sign>
<sign_type>MD5</sign_type>
</alipay>
<?xml version="1.0" encoding="utf-8"?>
<alipay>
<is_success>F</is_success>
<error>DATA_NOT_EXIST</error>
<sign>744a87f0e3b40e6a8cd8f9705ce61511</sign>
<sign_type>MD5</sign_type>
</alipay>