Accept a payment
After the account binding process is completed, the merchant can initiate a payment with the access token that is retrieved during the account binding process, without involving any further user interactions.
To accept the payment in this scenario, the Acquiring Service Provider (ACQP) needs to complete the following steps:
The following figure illustrates the workflow of how to initiate and process a payment.
Figure 1. The payment processing workflow of Auto Debit
The payment process consists of the following steps:
- The merchant assembles a payment request with the access token that is obtained during account binding and initiates a payment to the ACQP, which calls the pay API with the access token to initiate a payment to Alipay+ (Steps 1-3).
- Alipay+ processes the payment and returns the payment result to the ACQP, which syncs the payment result to the merchant (Steps 4-6).
- The merchant calls the ACQP to inquire about the payment result. The ACQP then initiates inquiryPayment API requests to obtain the payment result from Alipay+. At the same time, Alipay+ calls the notifyPayment API to notify the ACQP of the payment result, which is then synced to the merchant (Steps 7-12).
Step 1. Initiate a payment
After the account binding process is completed, the merchant as the auth client, obtains the user authorization (the access token). Then the merchant can initiate a payment request according to the business scenario, which can be an individual payment request or one of the subscription payment requests. The ACQP then uses the access token to assemble a request to call the pay API.
- The following list provides the key information that the ACQP needs to take into consideration when configuring the request parameters of the pay API:
- paymentAmount.currency: specifies the transaction currency.
- paymentAmount.value: the value of this parameter must be in the smallest currency unit. For example, when the currency is HKD, $5.99 must be specified as 599. When the currency is JPY, ￥599 must be specified as 599. Check ISO 4217 Currency Code for more details.
- paymentMethod.paymentMethodType: the value of this parameter must be set to
- paymentMethod.paymentMethodId: specifies the value of the accessToken parameter that is obtained in the account binding process.
- paymentFactor.isAgreementPayment: the value of this parameter must be set to
- paymentFactor.presentmentMode: the value of this parameter must be set to
- paymentExpiryTime: the expiration time expected for this payment. Normally, the Auto Debit payment can be processed and results can return synchronously in a very short time. However, when some issues (such as network timeout) occur, the payment will be closed by Alipay+ when the time reaches the expiration time. By default, the expiration time is 1 minute.
- paymentRequestId: must be a unique ID that is assigned by the payment initiator to identify an order payment.
- The following table lists the different results that the ACQP might receive from Alipay+.
Payment succeeds, which means the money is deducted from the user. Update the status from the merchant side.
Payment fails. Take actions according to the error message in result.resultCode.
Payment in processing. Call the inquiryPayment API to inquire about the payment result. The inquiry request can be sent 10 to 20 times within 60 seconds.
No result received
The ACQP sends a request to Alipay+.
Alipay+ returns a response to the ACQP.
For more information about how to use the pay API (such as the field description and format), see pay.
Step 2. Handle the payment result
For a payment request, the following three methods are provided for the ACQP to retrieve the payment result:
- from the synchronous response of the pay API.
- use the inquiryPayment API to inquire about the payment result.
- from the payment notification that Alipay+ asynchronously sends to the ACQP by using the notifyPayment API.
- It is required for the ACQP to support all three methods so that the ACQP can really obtain the payment result.
- The results from the three ways might be inconsistent because the result from the synchronous response of the pay API and the result from the inquiryPayment API might be in the intermediate state. To get the final state of the payment, the ACQP needs to keep retrying the inquiryPayment API call or wait for Alipay+ to send the notifyPayment request.
The following diagram illustrates all the possible combinations of the results that the ACQP might encounter in the three ways.
Figure 2. Combinations of different kinds of results
- For how to handle the result that is returned in the response of the pay API, see Processing logic in Step 1.
- The following table lists the different results that the ACQP might receive from Alipay+ when calling the inquiryPayment API.
The payment succeeds. The ACQP can proceed with the order as a successful payment.
The payment fails. The ACQP needs to take further actions according to the error message returned in the paymentResult.resultCode parameter.
The payment is still in processing. The ACQP needs to retry the inquryPayment request until the payment result (paymentResult.resultStatus) in the inquriyPayment response is
No results received
For more information about how to use the inquiryPayment API (such as the field description and format), see inquiryPayment.
- After the ACQP successfully handles the notification request, the ACQP needs to return a response to Alipay+. Alipay+ provides a notification retry mechanism if the result.resultCode parameter in the notification response returned from the ACQP is not
S. For how to handle the notification, check the following things:
- Refer to Handle a notification to find out the common things that you need to do and consider.
- Refer to the table below to deal with the different payment results that the ACQP might receive in the notifyPayment request that is sent by Alipay+.
The payment succeeds. The ACQP needs to verify the values of the paymentRequestId and paymentAmount parameters are consistent with the payment information that is stored at the ACQP side.
The payment fails. The ACQP needs to refer to the paymentResult.resultCode parameter to decide the further processing logic at the ACQP side.