Alipay, China's leading third-party online payment solutionAlipay, China's leading third-party online payment solution

      Accept payments

      To make integration with Alipay, you can use Alipay-provided open SDKs or you can call APIs by yourself.


      #Use open SDKs

      Alipay Global Open SDK encapsulates the process to perform the integration, including the process of adding and validating signatures for calling Alipay APIs. For more details, see Alipay SDK for Java, Alipay SDK for PHP, Alipay SDK for Python and Alipay SDK for .Net.


      #API integration

      After integrating with Alipay Entry Code Payment product, payments can be accepted by asking the user to scan the entry code. The following graphic shows the interaction flow of accepting the payment from a customer:


      Entry code.png

      Figure 1. Payment process of Entry Code Payment


      The payment process consists of the following steps:

      1. Customer opens the wallet and scans the entry code.
        • Merchant returns the cashier URL and the customer wallet is redirected to the merchant page.
        • Merchant presents the page to the customer
      1. Customer enters the transaction amount.
      2. Customer confirms the payment.
        • Merchant sends the payment request to Alipay.
        • Alipay returns the result.
        • Merchant arouses the wallet to initiate the payment.
      1. Customers confirms to pay.
        • Alipay notifies the payment result to merchant.
        • Merchant returns a receipt acknowledgement message to Alipay.


      #Initiate a payment request

      To integrate with Alipay Entry Code Payment product, first go through the Development section to learn about how to invoke an interface in both sandbox and production environments and then complete the following steps:


      #Step 1: Construct the request

      The request that you need to construct is composed of four parts:

      • Request URL format: https://open-sea.alipay.com/ams/api/v1/payments/pay
      • Method: POST
      • HTTP header: mainly contains fields such as Client-Id, Signature, Encrypt, Content-Type, Request-Time, and Agent-Token
      • HTTP bodycontains the detailed business request information in the JSON format and the business request information needs to be signed. For more information, see the pay interface.  


      The following example shows an HTTP body of a request for an Entry Code Payment:

      copy
      {
        "productCode": "IN_STORE_PAYMENT",
        "paymentNotifyUrl": "http://xmock.inc.alipay.net/api/Ipay/globalSite/automtion/paymentNotify.htm",
        "paymentRequestId": "102775745075669",
        "paymentFactor": {
          "inStorePaymentScenario": "EntryCode"
        },
        "order": {
          "orderDescription": "Mi Band 3 Wrist Strap Metal Screwless Stainless Steel For Xiaomi Mi Band 3 ",
          "orderAmount": {
            "currency": "USD",
            "value": "10"
          },
          "merchant": {
            "referenceMerchantId": "seller231117459@login.com",
            "merchantName": "cup Hu",
            "merchantMCC": "1234",
            "store": {
              "referenceStoreId": "S0000000001",
              "storeName": "UGG-2",
              "storeMcc": "1405"
            }
          },
          "env": {
            "userAgent": "Mozilla/5.0 (Linux; Android 9; LYA-AL00 Build/HUAWEILYA-AL00L; wv)  AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0  Chrome/70.0.3538.110  Mobile Safari/537.36 NebulaSDK/1.8.100112 Nebula  AlipayDefined(nt:WIFI,ws:360|0|3.0) AliApp(APHK/2.6.0.160)  AlipayClientHK/2.6.0.160 Language/zh-HK useStatusBar/true isConcaveScreen/true AlipayClient/10.1.32.600 Alipay Language/zh-Hans"
          }
        },
        "paymentAmount": {
          "currency": "USD",
          "value": "10"
        },
        "paymentMethod": {
          "paymentMethodType": "CONNECT_WALLET"
        }
      }


      Notes

      • Specify inStorePaymentScenario with EntryCode in the payment interface for an Entry Code Payment.
      • All transaction amount needs to be represented in the smallest unit of a currency. For example, when currency code is USD, $5.99 is represented as 599. When currency code is JPY, ¥599 is represented as 599. See ISO 4217 Currency Codes for details.


      #Step 2: Submit the payment request to Alipay

      Submit the request you constructed as suggested in Step 1 to Alipay with the following gateway addresses:

      • open-na.alipay.com: for merchants in North America.
      • open-sea.alipay.com: for merchants in Asia.
      • open-eu.alipay.com: for merchants in Europe.


      Note: 

      Stay open to the possibility that gateway addresses might change.


      #Step 3: Handle the payment result

      The payment result can be synchronous notification, asynchronous notification, or both.

      To handle the payment result notifications, you must:

      1. Process the payment result response or notification by verifying the signature of the notification.
      2. Return a receipt acknowledgment message to Alipay. This step is only required for asynchronous notification.


      #Verify the signature of the notification

      The notification Alipay sends to the merchant is signed. The merchant needs to verify the signature to confirm whether the notification is sent from Alipay.


      The following example shows typical notification headers and bodies.

      Notification header:

      copy
      "Content-Type": "application/json",
      "Request-Time": "2019-07-12T12:08:56.253+05:30",
      "client-id": "T_111222333",
      "Signature": "algorithm=RSA256,keyVersion=1,signature=jTOHqknjk%2fnDjEn8lfg%2beNODdoh2eHGJV%2blvrKaDwP782WxJ7ro49giqUu23MUM8sFVVNvhg32qHS3sd4O6uf5kAVLqztqNOPJFZcjw141EVi1vrs%2bIB4vU0%2fK%2f8z2GyWUByh2lHOWFsp%2b5QKCclXp%2bjacYqWYUur5IVbuebR1LoD5IiJ7u7J9qYriFxodkxmIAJYJyJs7mks2FWHh2YePLj3K%2f4B65idy7RBKqY1NN1XcvqnbQmlfCH8CIv75bg%2fr9sGmPE5a%2bYgL8N9Q41buGwMSq1IcNsbceMbyPhw5Z5HnJ7tPz12fvdSi0cEicPikDthQ2EQFmtpntXcAc%2fHA%3d%3d"


      Notification body (for a successful payment that succeeds):

      copy
      {
          "notifyType": "PAYMENT_RESULT",
          "result": {
              "resultCode": "SUCCESS",
              "resultStatus": "S",
              "resultMessage": "success"
          },
          "paymentRequestId": "pay_test_1106_0002", //The unique ID that is assigned by a merchant to identify a payment request.
          "paymentId": "20200101234567890132", //The unique ID that is assigned by Alipay to identify a payment.
          "paymentAmount": { //The payment amount that merchant requests to receive in the order currency. 
              "value": "8000",
              "currency": "EUR"
          },
          "paymentCreateTime": "2020-01-01T12:01:00+08:30", //The date and time when the payment is created
          "paymentTime": "2020-01-01T12:01:01+08:30" //The date and time when the payment reaches a final state of success or failure
      }


      Notification body (for a failed payment):

      copy
      {
       "notifyType":"PAYMENT_RESULT",
       "result": {
          "resultCode":"USER_BALANCE_NOT_ENOUGH",
          "resultStatus":"F",
          "resultMessage":"user balance not enough"
       },
       "paymentRequestId":"pay_test_1106_0002", 
       "paymentId":"20200101234567890132"
      }


      Based on the above notification header and body, the content to be verified is as follows:

      copy
      POST {Use your notification address, such as /merchant/notify}
      T_111222333.2019-07-12T12:08:56+05:30.{"notifyType":"PAYMENT_RESULT","result":{"resultCode":"SUCCESS","resultStatus":"S","resultMessage":"success"},"paymentRequestId":"pay_test_1106_0002","paymentId":"20200101234567890132","paymentAmount":{"value":"8000","currency":"EUR"},"actualPaymentAmount":{"value":"8000","currency":"EUR"},"paymentCreateTime":"2020-01-01T12:01:00+08:30","paymentTime":"2020-01-01T12:01:01+08:30"}


      #Receive notifications

      You can use notifications to automate business processes. To process notifications, you must:

      1. Configure the server address to receive notifications.

      Configure the server address to receive notifications from Alipay on the Alipay Developer Platform or in the payment interface.

      1. Accept notifications and acknowledge the notification with required response.

      To ensure that your server is properly accepting notifications, Alipay requires you to acknowledge every notification with a success response.

      1. Apply your business logic.


      If you use HTTPS to receive notifications, server certificates must be configured according to the authentication requirements. 


      Acknowledge the notification with required response

      After the customer payment succeeds, Alipay sends a payment result notification to the merchant. The address that is used to receive the notification is specified when sending the payment request. After receiving the notification, the merchant must return a receipt acknowledgment message to Alipay.


      If you do not reply to this notification, Alipay considers that the notification is not received and continues to send the notification. The response (a receipt acknowledgment message) sent to Alipay does not need to be signed. 


      Note:

      Only after receiving the Alipay payment success results notification, the payment can be considered successful and the merchant can proceed with the purchase process, for example, deliver goods. Do not rely on the payment results page to determine whether the payment succeeds because the customer might close the result page before the result arrives or an attacker-tampered information might be presented on the result page.


      The following samples illustrate the response header and body that Merchant sends to Alipay:

      Response header:

      copy
      "Content-Type": "application/json",
      "response-time": "2019-07-12T12:08:56+05:30",
      "client-id": "T_111222333",
      "Signature": "algorithm=RSA256,keyVersion=1,signature=jTOHqknjk%2fnDjEn8lfg%2beNODdoh2eHGJV%2blvrKaDwP782WxJ7ro49giqUu23MUM8sFVVNvhg32qHS3sd4O6uf5kAVLqztqNOPJFZcjw141EVi1vrs%2bIB4vU0%2fK%2f8z2GyWUByh2lHOWFsp%2b5QKCclXp%2bjacYqWYUur5IVbuebR1LoD5IiJ7u7J9qYriFxodkxmIAJYJyJs7mks2FWHh2YePLj3K%2f4B65idy7RBKqY1NN1XcvqnbQmlfCH8CIv75bg%2fr9sGmPE5a%2bYgL8N9Q41buGwMSq1IcNsbceMbyPhw5Z5HnJ7tPz12fvdSi0cEicPikDthQ2EQFmtpntXcAc%2fHA%3d%3d"


      Response body:

      copy
      {
       "result": {
          "resultCode":"SUCCESS",
          "resultStatus":"S",
          "resultMessage":"success"
       }
      }


      #Exceptional case

      The customer pays successfully, but the merchant does not receive the payment result notification.

      In this case, the customer completes the payment and money is deducted. However, the merchant doesn't receive the payment result notification. Therefore, the transaction is failed.


      Possible reasons:

      • After the payment of the customer reaches the final payment status (payment success or payment failure), Alipay does not notify the merchant in time.
      • Alipay notified the merchant, but the merchant did not get the payment result due to network reasons.


      Actions:

      The merchant is suggested to call the inquiryPayment interface to query the payment status before the transaction closing time. If a successful payment status is obtained, proceed with the transaction. If no clear payment status is returned, continue to retry the query request. If a failed payment status is obtained, or the transaction times out, call cancel interface to cancel the transaction.


      Note:

      The transaction closing time is determined by one of the following ways:

      • If the payment is not completed in time after the checkout page is presented, the transaction is to be closed by default.
      • The merchant can set the closing time by using the paymentExpireTime parameter in the pay interface, and the merchant can also call the cancel interface to close the unpaid transaction or cancel the paid transaction.
      • If the merchant does not specify the paymentExpireTime parameter, the transaction closing time defaults to the contract agreement.


      #More information

      Post-payment services

      Settlement and reconciliation