This guide is written for application developers who want to integrate AlipayHK APP payment solution. Implementing this solution requires software development skills. You must write code that uses the API request and reply fields to integrate AlipayHK APP payment solution into your existing order management system.
AlipayHK APP payment solution is mainly used to provide convenient, safe and reliable payment services to third-party applications. After integrating the AlipayHK SDK 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.
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.
Except for "sign" and "sign_type", all other parameters used need to be signed.
For the following parameter array:
string[] parameters={"partner=\"208861122157****\"",
"seller_id=\"208861122157****\"",
"out_trade_no=\"0811172929-1013\"",
"subject=\"test\"",
"body=\"test\"",
"currency=\"HKD\"",
"total_fee=\"0.1\"",
"notify_url=\"http://0ee96cd2.ngrok.io/notify.htm\"",
"service=\"mobile.securitypay.pay\"",
"payment_type=\"1\"",
"_input_charset=\"utf-8\"",
"appenv=\"system=java^version=1.8\"",
"forex_biz=\"FP\""
};
Combine all array values in the format of key= “value” and then link them up by the character “&” in an alphabetical order. For example:_input_charset="utf-8"&appenv="system=java^version=1.8"&body="test"¤cy="HKD"&forex_biz="FP"¬ify_url="http://0ee96cd2.ngrok.io/notify.htm"&out_trade_no="0811172929-1013"&partner="208861122157****”&payment_type="1"&seller_id="208861122157****”&service="mobile.securitypay.pay"&sign="$$$"&sign_type="RSA"&subject="test"&total_fee="0.1"
resultStatus={9000};memo={};result={partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="test"&body="testtest"&total_fee="0.01"¬ify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&show_url="m.alipay.com"&success="true"&sign_type="RSA"&sign="hkFZr+zE9499nuqDNLZEF7W75RFFPsly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZgSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="}
Take out the part of result, remove "sign" and "sign_type" parameters:partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="test"&body="testtest"&total_fee="0.01"¬ify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&show_url="m.alipay.com"&success="true"
http://0ee96cd2.ngrok.io/notify.htm? buyer_id=208812287878****¤cy=HKD&forex_rate=0.85420000¬ify_id=e5f5c6a77034fcd111e373e7e61dcbegdy¬ify_type=trade_status_sync¬ify_time=2017-08-11 17:31:39&out_trade_no=0811172929-1013&rmb_fee=0.09&seller_id=208861122157****&trade_no=2017081121001003050274536539&total_fee=0.10&trade_status=TRADE_FINISHED&sign_type=RSA&sign=$$$
Remove sign and sign_type, sort other parameters in alphabetical order, and then link up all array values by the character of “&”:buyer_id=208812287878****¤cy=HKD&forex_rate=0.85420000¬ify_id=e5f5c6a77034fcd111e373e7e61dcbegdy¬ify_type=trade_status_sync¬ify_time=2017-08-11 17:31:39&out_trade_no=0811172929-1013&rmb_fee=0.09&seller_id=208861122157****&trade_no=2017081121001003050274536539&total_fee=0.10&trade_status=TRADE_FINISHED
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:
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 |
Parameter |
Type(length in bytes) |
Description |
Optional |
Example |
transIn |
String |
Alipay userID that Alipay account for deposit. Alipay userID that composed of 16 digits beginning with 2088. |
N |
2088101126708402 |
amount |
String |
Split Amount. The format must be correct to the currency! |
N |
0.10 |
currency |
String |
Split currency. If parameter (total_fee) was used, the split currency must be foreign currency and the same with settlement currency! The parameter (total_fee and rmb_fee ) are mutual exclusive. |
N |
USD |
desc |
String |
|
N |
SampleInsuranceFee=10usd|RelevantTax=10usd|DeliveryFee=10usd|AnyOtherFees=10usd |
For example:
split_fund_info=[{"transIn":"2088101126708402","amount":"0.10","currency":"USD","desc":" Split _test1"},{"transIn":"2088101126707869","amount":"0.10","currency":"USD","desc":"SampleInsuranceFee=10usd|RelevantTax=10usd|DeliveryFee=10usd|AnyOtherFees=10usd"}]
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. |
Refund split detail parameter format is JSON, include follow parameters:
Parameter | Type (Byte length) |
Description |
Optional |
Example |
transOut |
String |
Alipay userID that Alipay account for transfer refund fee . Alipay userID that composed of 16 digits beginning with 2088. |
N |
2088101126708402 |
amount |
String |
Split Amount. The format must be correct to the currency! |
N |
0.10 |
currency |
String |
Split currency .The currency must be same with refund currency! The parameter (total_fee and rmb_fee ) are mutual exclusive. |
N |
USD |
desc |
String |
Split discretion |
Y |
Refund split test1 |
Example:
Format Structure :
split_fund_info=[{"transOut":"2088101126708402", "amount":"0.10", "currency":"USD", "desc":"test1"}, {" transOut ":"2088101126708402", "amount":"0.30", "currency":"USD", "desc":"test2"}]
Refund splitting does not need to follow exactly the payment splitting. Just ensure that the total refund amount is equal to the total payment amount. For example, ¥9 of the total payment of ¥10 was allocated to the primary account, ¥1 to the split account. When performing a refund, you can return ¥5 through the primary account, ¥5 through the split account.
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.
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. |
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.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.
This flow only applies for the acquirer. If you are an acquirer, you can use this flow to register online secondary merchants information into Alipay system.
The secondary merchant maintenance service name is: alipay.overseas.secmerchant.online.maintain.
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:
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>