| partnerUid |
|
|
String |
Merchant-side user ID |
M |
Expect merchant side UID |
| partnerOrderId |
|
|
String |
Merchant-side payment order ID (Idempotent Key). |
M |
Idempotent Key.
The unique payment serial number generated by the merchant for this specific transaction.
⚠️ CRITICAL FOR OPERATIONS:
This ID must be explicitly visible and searchable within your Customer Service (CS) and Order Management System (OMS).
It will serve as the primary reference number for cross-platform reconciliation, troubleshooting, and handling customer complaints.
Please DO NOT use hidden backend IDs or database primary keys, as this will cause severe friction and high communication costs during CS escalations. |
| orderCreateTime |
|
|
String |
Order creation time |
M |
This field should represent the exact moment the end-user clicks to place the order (i.e., the original order generation time).
Format: ISO 8601 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. (Note: SSS represents 3-digit milliseconds, and XXX represents the timezone offset).
Timezone: Timezone offset is strictly required. DiDi will automatically normalize this to local time based on the offset provided. Examples:- Mexico City Time: 2025-12-08T14:30:15.123-06:00
- Beijing Time: 2025-12-08T14:30:15.123+08:00
|
| partnerOrderAmount |
|
|
Long |
Order amount |
M |
The actual payment amount after applying all merchant discounts.
Calculation: The raw amount must be multiplied by 100. (Do NOT pass floating-point/decimal numbers).
Currency & Unit: Must correspond to the Mexican Peso (MXN). The required unit is centavos (the minimum currency unit).
Example: > For an order value of 99.99 MXN, the value transmitted must be 9999. |
| redirectUrl |
|
|
String |
Redirect URL |
M |
After the payment operation is completed on the DiDi Paga Después page, regardless of success or failure, this URL will be parsed and returned.
This is mainly a page-to-page interaction.
It will not verify whether the URL can be redirected. |
| redirectAppLink |
|
|
String |
App redirect link |
C |
The Link used to wake up and redirect the user back to the Merchant's native APP from the DiDi APP upon payment completion.
Usage Rules:
- If operateSource = APP, this field is Mandatory.
- If operateSource = WEB/WAP, this field is Optional.
Link format:
- Deep Link Formula: [Brand Name][Link]
- Example: globalOneTravel://one/webpage?weburl=https%3A%2F%2Fpay.didiglobal.com%2Fpaga-despues%2Flanding
-> Breakdown:
** Brand name - [globalOneTravel]
** Link - ://one/webpage?weburl=https%3A%2F%2Fpay.didiglobal.com%2Fpaga-despues%2Flanding]
-> Brand Examples:
** Client A: sheme://webview/load?target=https%3A%2F%2Fpay.merchant-b.com%2Fgateway%2Fcallback |
| expireTime |
|
|
String |
Expiration time |
O |
The expiration time for the payment link.
- Business Logic: If the user fails to click "Confirm Payment" before this timestamp, the order automatically expires.
- Fallback Strategy: If left blank/not provided, DiDi will automatically calculate the expiration time as Current Time + N Hours based on system configurations.
- Format & Timezone: ISO 8601 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. Timezone offset is strictly mandatory.
- Example: 2025-12-08T01:11:33.000-06:00 |
| currency |
|
|
String |
Currency |
M |
Mexico MXN |
| test |
|
|
Boolean |
Test order Remark flag. |
O |
This field is a Test order remark flag.
****** Testing Environment**
For testing environment, the value should be one of below:- doesn't exist: this field doesn't exist.
- true: it's a testing transaction. The same effect as field empty.
Then, no reconciliation will be performed and DiDi won't clear the money to client.
****** Production Environment**
For production environment, it can only be one of the values below:- doesn't exist: this field doesn't exist. This is a production normal transaction.
- false: this is a production normal transaction.
- true: This is a testing transaction in production env. This transaction won't be settled and won't be included into the reconciliation file.
|
| extendInfo |
|
|
Object |
Extended information |
M |
|
|
deviceInfo |
|
|
|
M |
|
|
|
deviceId |
String |
Device ID |
C |
The device identifier used for fraud prevention and credit risk assessment.
- If
operateSource = APP: Mandatory. Must pass the real native hardware identifier (e.g., IDFA/IDFV for iOS, or Android ID/OAID for Android).
- If
operateSource = WEB/WAP: Optional.
|
|
|
androidId |
String |
android deviceid |
O |
Used for Android device identification. |
|
|
iosId |
String |
ios deviceid |
O |
idfa/idfv
Used for IOS device identification. |
|
|
gps |
String |
latitude and longitude coordinates |
O |
The real-time geographic coordinates of the end-user at checkout. |
|
|
ip |
String |
Public IP |
M |
The public IP address of the end-user at checkout, crucial for anti-fraud regional validation.
Business Logic:
- If operateSource = APP: The current public IP address of the consumer's mobile device.
- If operateSource = WEB/WAP: The current public IP address of the consumer's computer/browser.
CRITICAL:
Do NOT pass your backend server's IP or internal LAN IPs (e.g., 127.0.0.1, 192.168.x.x), as this will cause immediate anti-fraud rejection. |
|
|
operateSource |
String |
Operation source (web page/APP) |
M |
The channel or platform context where the end-user initiates the transaction.
Format & Rules: Must match one of the following exact enumeration values:
- WAP: Mobile browser environment (e.g., user opens Shein via Safari or Chrome on a mobile phone without downloading the native app).
- WEB: Desktop or PC browser environment.
- APP: Native mobile application client. |
|
|
lang |
String |
Language |
O |
Enumeration value:
en-US
es-MX
If not passed or if the passed value is invalid, defaults to es-MX. |
|
userInfo |
|
Object |
User information |
M |
|
|
|
partnerEmail |
String |
Merchant-side user email |
C |
Normally, this field is optional.
This field will be mandatory only when your company:- can't provide the partnerPhone due to your platform design, and
- get the approval from DiDi BNPL support team to remove the partnerPhone in the Create Payment Order API.
|
|
|
partnerPhone |
String |
User mobile phone number |
M |
This is a mandatory field. The field information should be:
1. Best scenario: The phone number from the user last login: The Best one and the easiest one that you can provide.
2. Alternative option: The phone number entered by the user when changing their linked phone.
3. Bottom option: The phone number originally provided during user registration: If this phone number was changed, please updated the new one for DiDi.
This phone number is one of the most important field for the BNPL transaction. And this field is mandatory.
P.S. If your company can't provide this field to DiDi due to some specific reason, please help to contact the DiDi BNPL support team to explain the reason. |
|
|
phoneCountryCode |
String |
User mobile phone number country code |
M |
The same rules as field "partnerPhone". |
|
|
regTime |
String |
User registration time |
C |
The timestamp when the end-user registered their account on the merchant's platform.
Format: ISO 8601 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. Timezone offset is strictly mandatory.
Example: 2025-12-08T01:11:33.000-06:00
Rules:
This field is Mandatory if newUserFlag is absent.
This field is Optional if newUserFlag is present. |
|
|
newUserFlag |
String |
New user or not |
C |
The flag indicating whether the end-user is a newly registered user on the merchant's platform within the last 30 days.
Format & Rules: Enumeration string value:
- 1: New user (registered within the last 30 days).
- 0: Existing user (registered more than 30 days ago).
Rules:
This field is Mandatory if regTime is absent.
This field is Optional if regTime is present. |
|
|
nickName |
String |
User nickname |
O |
|
|
|
userLevel |
String |
User rating |
O |
The comprehensive user classification or loyalty tier on the merchant's platform.
Free-text string representing the merchant's internal user tiering system.
Example: VIP_LEVEL_3 or PLATINUM_MEMBER or HIGH_CREDIT_SCORE or others. |
|
|
smeTag |
Boolean |
Small business label |
O |
Enumeration values: true / false / null
true-the enterprise is a small or micro enterprise.
false-the enterprise is not a small or micro enterprise.
null-no data is available. |
|
|
lastSuccInstrument |
String |
Last successful payment method |
O |
The payment instrument used by the user (on the merchant platform) during their last successful transaction. |
|
fees |
|
List<Object> |
Expense item |
O |
A detailed list of additional order expenses (e.g., shipping, taxes) used for itemized breakdown display and auditing. |
|
|
type |
String |
Type |
O |
The specific category classification of the fee item, currently restricted to the enumeration value POSTAGE (Shipping/Delivery fee).
Enum:
POSTAGE |
|
|
amount |
Long |
Amount of money |
O |
The exact financial value of the fee item, represented as a long integer in the currency's smallest unit (e.g., centavos for MXN). |
|
additionalRiskData |
|
String |
additional risk data |
O |
Additional risk data |
|
marketingFlag |
|
String |
Marketing Flag |
O |
The flag indicating whether marketing promotions, discounts, or campaigns are applied to this transaction.
1 - Marketing
0 - Not marketing |
| items |
|
|
List<Object> |
Goods information |
O |
If there are multiple quantities of the same SKU, only the quantity needs to be changed. |
|
categoryId |
|
String |
Unique identifier for the goods catalog |
O |
|
|
categoryName |
|
String |
Goods catalog name |
O |
|
|
skuId |
|
String |
Unique identifier for goods SKU |
O |
|
|
skuName |
|
String |
Goods SKU name |
M |
goods SKU name |
|
goodsName |
|
String |
User-visible display field |
O |
goods Name |
|
unitPrice |
|
Long |
Actual unit price (after discount) |
O |
The amount unit is cents. For example, if it's 99.99 pesos, the value here should be 9999.It must be transmitted if it exists. |
|
skuCurrency |
|
String |
Currency |
O |
ISO 4217 standard-Mexico MXN |
|
quantity |
|
Integer |
Number |
O |
|
|
pictureUrl |
|
String |
Goods picture URL |
O |
|
|
shippingAddress |
|
String |
Receiving address |
O |
To the street address |
|
shippingAddress2 |
|
String |
Receiving address |
O |
To unit address |
|
shippingPostcode |
|
String |
Receipt zip code |
O |
|
|
shippingPhoneNumber |
|
String |
Receiving mobile phone number |
O |
|
|
shippingPhoneCountryCode |
|
String |
Receiving mobile phone number country code |
O |
52 |
|
seller |
|
Object |
Seller information |
O |
|
|
|
sellerId |
String |
Unique seller ID |
C |
The unique identifier of the actual seller or sub-merchant/store conducting the transaction.
- Platform-model Merchants (e.g., Marketplaces): Strictly mandatory (M) to track individual sub-stores.
- Direct-to-Consumer (DTC) / Direct-sale Merchants: Optional (O). |
|
|
sellerName |
String |
Seller name |
O |
|
|
|
sellerRegTime |
String |
Seller registration time |
O |
Pattern: yyyy-MM-dd'T'HH:mm:ss.SSSXXX e.g., '2025-12-08T01:11:33.000-06:00' Timezone offset is mandatory. |
|
|
mccCode |
String |
Merchant Category Code |
C |
merchant business type.
- Platform-model Merchants (e.g., Marketplaces): Strictly mandatory (M) to track individual sub-stores.
- Direct-to-Consumer (DTC) / Direct-sale Merchants: Optional (O). |
|
type |
|
String |
Goods type |
O |
Enumeration value:
PHYSICAL_GOOD
VIRTUAL_GOOD |
| metadata |
|
|
String |
Metadata information |
O |
DiDi Paga Después will provide this information via the query and order callback
JSON format |