Skip to content

Latest commit

 

History

History
944 lines (690 loc) · 24.3 KB

legacy_api.md

File metadata and controls

944 lines (690 loc) · 24.3 KB

Alipay Legacy API

It's recommended to use new alipay api - Open API, read Alipay::Client for more detail.

A unofficial alipay ruby gem.

Alipay official document: https://b.alipay.com/order/techService.htm .

Installation

Add this line to your application's Gemfile:

gem 'alipay'

And then execute:

$ bundle

Configuration

Alipay.pid = 'YOUR_PID'
Alipay.key = 'YOUR_KEY'

#Alipay.sign_type = 'MD5' # Available values: MD5, RSA. Default is MD5
#Alipay.debug_mode = true # Enable parameter check. Default is true.

You can set default key, or pass a key directly to service method:

Service.create_partner_trade_by_buyer_url({
  out_trade_no: 'OUT_TRADE_NO',
  # Order params...
}, {
  pid: 'ANOTHER_PID',
  key: 'ANOTHER_KEY',
})

Service

担保交易收款接口

Name

create_partner_trade_by_buyer

Definition

Alipay::Service.create_partner_trade_by_buyer_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.create_partner_trade_by_buyer_url(
  out_trade_no: '20150401000-0001',
  subject: 'Order Name',
  price: '10.00',
  quantity: 12,
  logistics_type: 'DIRECT',
  logistics_fee: '0',
  logistics_payment: 'SELLER_PAY',
  return_url: 'https://example.com/orders/20150401000-0001',
  notify_url: 'https://example.com/orders/20150401000-0001/notify'
)
# => 'https://mapi.alipay.com/gateway.do?service=create_partner_trade_by_buyer&...'

Guide consumer to this address to complete payment

Arguments

Key Requirement Description
out_order_no required Order id in your application.
subject required Order subject.
price required Order item's price.
quantity required Order item's quantity, total price is price * quantity.
logistics_type required Logistics type. Available values: POST, EXPRESS, EMS, DIRECT.
logistics_fee required Logistics fee.
logistics_payment required Who pay the logistics fee. Available values: BUYER_PAY, SELLER_PAY, BUYER_PAY_AFTER_RECEIVE.
return_url optional Redirect customer to this url after payment.
notify_url optional Alipay asyn notify url.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/alipayescow.zip .

确认发货接口

Name

send_goods_confirm_by_platform

Definition

Alipay::Service.send_goods_confirm_by_platform({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.send_goods_confirm_by_platform(
  trade_no: '201504010000001',
  logistics_name: 'example.com',
  transport_type: 'DIRECT'
)
# => '<!xml version="1.0" encoding="utf-8"?><alipay><is_success>T</is_success></alipay>'

Arguments

Key Requirement Description
trade_no required Trade number in Alipay system, should get from notify message.
logistics_name required Logistics Name.
transport_type/create_transport_type required Allowed values: POST, EXPRESS, EMS, DIRECT.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/alipayescow.zip .

即时到账收款接口

Name

create_direct_pay_by_user

Definition

Alipay::Service.create_direct_pay_by_user_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.create_direct_pay_by_user_url(
  out_trade_no: '20150401000-0001',
  subject: 'Order Name',
  total_fee: '10.00',
  return_url: 'https://example.com/orders/20150401000-0001',
  notify_url: 'https://example.com/orders/20150401000-0001/notify'
)

Arguments

Key Requirement Description
out_order_no required Order id in your application.
subject required Order subject.
total_fee required Order's total fee.
return_url optional Redirect customer to this url after payment.
notify_url optional Alipay asyn notify url.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/alipaydirect.zip .

手机网站支付接口

Name

alipay.wap.create.direct.pay.by.user

Definition

Alipay::Service.create_direct_pay_by_user_wap_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.create_direct_pay_by_user_wap_url(
  out_trade_no: '20150401000-0001',
  subject: 'Order Name',
  total_fee: '10.00',
  return_url: 'https://example.com/orders/20150401000-0001',
  notify_url: 'https://example.com/orders/20150401000-0001/notify'
)

Arguments

Key Requirement Description
out_order_no required Order id in your application.
subject required Order subject.
total_fee required Order's total fee.
return_url optional Redirect customer to this url after payment.
notify_url optional Alipay asyn notify url.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/alipaywapdirect.zip .

国际支付宝移动接口

Name

create_forex_trade_wap

Definition

Alipay::Service.create_forex_trade_wap_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.create_forex_trade_wap_url(
  out_trade_no: '20150401000-0001',
  subject: 'Order Name',
  merchant_url: 'http://example.com/itemback',
  total_fee: '10.00', #or rmb_fee, only one
  currency: 'USD',
  return_url: 'https://example.com/orders/20150401000-0001',
  notify_url: 'https://example.com/orders/20150401000-0001/notify'
)

Arguments

Key Requirement Description
out_order_no required Order id in your application.
subject required Order subject.
merchant_url required The link which customer could jump back to merchant page from Alipay cashier.
total_fee or rmb_fee required Order's total fee.
currency required currency type.
return_url optional Redirect customer to this url after payment.
notify_url optional Alipay asyn notify url.

This is not a complete list of arguments, please read official document: https://global.alipay.com/product/mobilepayments.html .

即时到账批量退款有密接口

Name

refund_fastpay_by_platform_pwd

Definition

Alipay::Service.refund_fastpay_by_platform_pwd_url

Example

batch_no = Alipay::Utils.generate_batch_no # refund batch no, you SHOULD store it to db to avoid alipay duplicate refund
Alipay::Service.refund_fastpay_by_platform_pwd_url(
  batch_no: batch_no,
  data: [{
    trade_no: '201504010000001',
    amount: '10.0',
    reason: 'REFUND_REASON'
  }],
  notify_url: 'https://example.com/orders/20150401000-0001/refund_notify'
)
# => https://mapi.alipay.com/gateway.do?service=refund_fastpay_by_platform_pwd&...

Arguments

Key Requirement Description
batch_no required Refund batch no, you should store it to db to avoid alipay duplicate refund.
data required Refund data, a hash array.
notify_url required Alipay notify url.
Data Item
Key Requirement Description
trade_no required Trade number in alipay system.
amount required Refund amount.
reason required Refund reason. Less than 256 bytes, could not contain special characters: ^ $ | #.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/alipaydirect.zip .

关闭交易接口

Name

close_trade

Definition

Alipay::Service.close_trade({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.close_trade(
  trade_no: '201504010000001'
)
# => '<?xml version="1.0" encoding="utf-8"?><alipay><is_success>T</is_success></alipay>'

# When fail
# => '<?xml version="1.0" encoding="utf-8"?><alipay><is_success>F</is_success> <error>TRADE_STATUS_NOT_AVAILD</error></alipay>'

ARGUMENTS

Key Requirement Description
out_order_no optional * Order number in your application.
trade_no optional * Trade number in alipay system.

* out_order_no and trade_no must have one.

单笔交易查询接口

Name

single_trade_query

Definition

Alipay::Service.single_trade_query({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.single_trade_query(
  trade_no: '201504010000001'
)
# => '<?xml version="1.0" encoding="utf-8"?><alipay><is_success>T</is_success>...

ARGUMENTS

Key Requirement Description
out_trade_no optional * Order number in your application.
trade_no optional * Trade number in alipay system.

* out_trade_no and trade_no must have one.

境外收单接口

Name

create_forex_trade

Definition

Alipay::Service.create_forex_trade_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.create_forex_trade_url(
  out_trade_no: '20150401000-0001',
  subject: 'Subject',
  currency: 'USD',
  total_fee: '10.00',
  notify_url: 'https://example.com/orders/20150401000-0001/notify'
)
# => 'https://mapi.alipay.com/gateway.do?service=create_forex_trade...'

ARGUMENTS

Key Requirement Description
out_trade_no required Order number in your application.
subject required Order subject.
currency required Abbreviated currency name.
total_fee required * Order total price.
notify_url optional Alipay asyn notify url.

* total_fee can be replace by rmb_fee.

境外收单单笔退款接口

Name

forex_refund

Definition

Alipay::Service.forex_refund_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Service.forex_refund_url(
  out_return_no: '20150401000-0001',
  out_trade_no: '201504010000001',
  return_amount: '10.00',
  currency: 'USD',
  reason: 'Reason',
  gmt_return: '20150401000000'
)

ARGUMENTS

Key Requirement Description
out_return_no required Refund no, you should store it to db to avoid alipay duplicate refund.
out_trade_no required Order number in your application.
return_amount required Refund amount.
currency required Abbreviated currency name.
reason required Refun reason.
gmt_return required * YYYYMMDDHHMMSS Beijing Time.

* Auto set Time.now if not set.

账单明细分页查询接口

Name

account.page.query

Definition

Alipay::Service::account_page_query({PARAMS}, {OPTIONS})

Example

Alipay::Service.account_page_query(
  page_no: 1,
  gmt_start_time: '2015-10-25 00:00:00',
  gmt_end_time: '2015-10-26 00:00:00'
)

Arguments

It's an unpublic api, contact support for permission and document.

批量付款到支付宝账户接口

Name

batch_trans_notify

Definition

Alipay::Service::batch_trans_notify_url({PARAMS}, {OPTIONS})

Example

Alipay::Service.batch_trans_notify_url(
  notify_url: 'https://example.com/orders/20150401000-0001/notify',
  account_name: '毛毛',
  detail_data: '0315006^testture0002@126.com^常炜买家^1000.00^hello',
  batch_no: '20080107001',
  batch_num: 1,
  batch_fee: 1000.00,
  email: 'biz_932@alitest.com'
)
#=> 'https://mapi.alipay.com/gateway.do?service=batch_trans_notify&...'

Arguments

Key Requirement Description
notify_url required Alipay asyn notify url.
account_name required Alipay account name of payer.
detail_data required Payment data.
batch_no required Batch transaction number.
batch_num required Batch transaction count.
batch_fee required Batch transaction total amount.
email required Alipay email account of payer.

Document: https://doc.open.alipay.com/doc2/detail?treeId=64&articleId=103773&docType=1

验证通知

Name

notify_verify

Definition

Alipay::Notify.verify?({PARAMS}, {OPTIONS})

Example

# Rails
# params except :controller_name, :action_name, :host, etc.
notify_params = params.except(*request.path_parameters.keys)

Alipay::Notify.verify?(notify_params, options = {})

QR Code 生成二维码

Name

alipay.commerce.qrcode.create

Definition

Alipay::Service.create_merchant_qr_code({PARAMS}, {OPTIONS})

Example

create_qr_code_params = {
  biz_type: "OVERSEASHOPQRCODE",
  biz_data: {
    address: "No.278, Road YinCheng, Shanghai, China",
    country_code: "CN",
    currency: "USD",
    secondary_merchant_id: "xxx001",
    secondary_merchant_industry: "7011",
    secondary_merchant_name: "xxx Store",
    store_id: "0001",
    store_name: "Apple store",
    trans_currency: "USD"
  }
}

Alipay::Service.create_merchant_qr_code(create_qr_code_params)
# => 'https://mapi.alipay.com/gateway.do?service=alipay.commerce.qrcode.create...'

ARGUMENTS

Key Requirement Description
notify_url optional Alipay asyn notify url.
biz_type required Business type that is defined by Alipay, this case is “OVERSEASHOPQRCODE”
biz_data required Business data. Format:JSON

BIZ_DATA ARGUMENTS (required)

Key Requirement Description
secondary_merchant_industry required Business category code of the secondary merchant.
secondary_merchant_id required The unique ID assigned by the partner to identify a secondary merchant.
secondary_merchant_name required Registration legal name of the secondary merchant, shown in the Alipay Wallet and the reconciliation file to identify a secondary merchant.
store_id required The unique ID that is assigned by the partner to identify a store of a merchant.
store_name required The name of the store.
trans_currency required The pricing currency
currency required The currency to settle with the merchant. The default value is CNY. If the pricing currency is not CNY, then the settlement currency must be either CNY or the pricing currency.
country_code required The country code that consists of two letters (alpha-2 code)
address required The address of the store where the code is created.

This is not a complete list of arguments, please read official document: https://global.alipay.com/docs/ac/global/qrcode_create#biz_data

QR Code 修改二维码

Name

alipay.commerce.qrcode.modify

Definition

Alipay::Service.update_merchant_qr_code({PARAMS}, {OPTIONS})

Example

update_qr_code_params = {
  biz_type: "OVERSEASHOPQRCODE",
  qrcode: "https://qr.alipay.com/baxxxxx",
  biz_data: {
    address: "No.278, Road YinCheng, Shanghai, China",
    country_code: "CN",
    currency: "USD",
    secondary_merchant_id: "xxx001",
    secondary_merchant_industry: "7011",
    secondary_merchant_name: "xxx Store",
    store_id: "0001",
    store_name: "Apple store",
    trans_currency: "USD"
  }
}

Alipay::Service.update_merchant_qr_code(update_qr_code_params)
# => 'https://mapi.alipay.com/gateway.do?service=alipay.commerce.qrcode.modify...'

ARGUMENTS

Key Requirement Description
notify_url optional Alipay asyn notify url.
biz_type required Business type that is defined by Alipay, this case is “OVERSEASHOPQRCODE”
biz_data required Business data. Format:JSON
qrcode required The returned QR code value after the code is generated successfully.

BIZ_DATA ARGUMENTS (required)

Key Requirement Description
secondary_merchant_industry required Business category code of the secondary merchant.
secondary_merchant_id required The unique ID assigned by the partner to identify a secondary merchant.
secondary_merchant_name required Registration legal name of the secondary merchant, shown in the Alipay Wallet and the reconciliation file to identify a secondary merchant.
store_id required The unique ID that is assigned by the partner to identify a store of a merchant.
store_name required The name of the store.
trans_currency required The pricing currency
currency required The currency to settle with the merchant. The default value is CNY. If the pricing currency is not CNY, then the settlement currency must be either CNY or the pricing currency.
country_code required The country code that consists of two letters (alpha-2 code)
address required The address of the store where the code is created.

This is not a complete list of arguments, please read official document: https://global.alipay.com/docs/ac/global/qrcode_modify#Qb0Hc

境外线下交易查询接口

Name

alipay.acquire.overseas.query

Definition

Alipay::Service.acquirer_overseas_query({PARAMS}, {OPTIONS})

Example

acquirer_overseas_query_params = {
  partner_trans_id: "2010121000000002"
}

Alipay::Service.acquirer_overseas_query(acquirer_overseas_query_params)
# => 'https://mapi.alipay.com/gateway.do?service=alipay.acquire.overseas.query...'

ARGUMENTS

Key Requirement Description
partner_trans_id required The original partner transaction ID given in the payment request
alipay_trans_id optional The transaction ID assigned by Alipay for the partner's payment request, which follows a mapping relation with the partner field plus the partner_trans_id field. When both of the fields are specified, alipay_trans_id will be verified first.

Document: https://global.alipay.com/docs/ac/global/overseas_query

境外线下单笔退款接口

Name

alipay.acquire.overseas.spot.refund

Definition

Alipay::Service.acquirer_overseas_spot_refund_url({PARAMS}, {OPTIONS})

Example

acquirer_overseas_spot_refund_params = {
  partner_trans_id: "2010121000000002",
  partner_refund_id: "301012133000002",
  currency: "USD",
  refund_amount: "0.01"
}

Alipay::Service.acquirer_overseas_spot_refund_url(acquirer_overseas_spot_refund_params)
# => 'https://mapi.alipay.com/gateway.do?service=alipay.acquire.overseas.spot.refund...'

ARGUMENTS

Key Requirement Description
partner_trans_id required The original partner transaction ID given in the payment request
partner_refund_id required The refund order ID in the partner system. The value of partner_refund_id cannot be the same as that of partner_trans_id. The partner_refund_id field plus the partner field identifies a refund transaction.
currency required The currency of the refund amount.
refund_amount required Refund amount, which must be less than or equal to the original transaction amount or the left transaction amount if ever refunded.
is_sync optional Indicates that the refund request is processed synchronously or asynchronously with a value of Y or N. The default value is N, which means an asynchronous notification from Alipay is returned to the merchant if the merchant has set the value of the notify_url field when sending the refund request. If the value is set as Y, it means only a synchronous response is returned to the merchant.

This is not a complete list of arguments, please read official document: https://global.alipay.com/docs/ac/global/spot_refund#92fa0c95

Mobile::Service

移动支付接口

Name

mobile.securitypay.pay

Definition

Alipay::Mobile::Service.mobile_securitypay_pay_string({ARGUMENTS}, {OPTIONS})

Example

Alipay::Mobile::Service.mobile_securitypay_pay_string(
  out_trade_no: '20150401000-0001',
  notify_url: 'https://example.com/orders/20150401000-0001/notify'
  subject: 'subject',
  total_fee: '10.00',
  body: 'text'
)
# => service="mobile.securitypay.pay"&_input_charset="utf-8"&partner=...

ARGUMENTS

Key Requirement Description
out_trade_no required Order number in your application.
notify_url required Alipay asyn notify url.
subject required Order subject.
total_fee required Order total price.
body required Order body, less than 512 bytes.

* This service only support RSA sign_type.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/WS_MOBILE_PAY_SDK_BASE.zip .

Wap::Service

授权接口

Name

alipay.wap.trade.create.direct

Definition

Alipay::Wap::Service.trade_create_direct_token({ARGUMENTS}, {OPTIONS}}

Example

token = Alipay::Wap::Service.trade_create_direct_token(
  req_data: {
    seller_account_name: 'account@example.com',
    out_trade_no: '20150401000-0001',
    subject: 'Subject',
    total_fee: '10.0',
    call_back_url: 'https://example.com/orders/20150401000-0001',
    notify_url: 'https://example.com/orders/20150401000-0001/notify'
  }
)

ARGUMENTS

Key Requirement Description
req_data required See req_data ARGUMENTS
req_data ARGUMENTS
Key Requirement Description
seller_account_name required Alipay seller account.
out_order_no required Order id in your application.
subject required Order subject.
total_fee required Order total price.
return_url optional Redirect customer to this url after payment.
notify_url optional Alipay asyn notify url.

This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/WS_WAP_PAYWAP.zip .

交易接口

Name

alipay.wap.auth.authAndExecute

Definition

Alipay::Wap::Service.auth_and_execute_url({ARGUMENTS}, {OPTIONS})

Example

Alipay::Wap::Service.auth_and_execute_url(request_token: token)

ARGUMENTS

Key Requirement Description
request_token required Get from trade_create_direct_token

风险探测服务接口

Name

alipay.security.risk.detect

Definition

Alipay::Wap::Service.security_risk_detect({ARGUMENTS}, {OPTIONS})

Example

Alipay::Wap::Service.security_risk_detect({
  order_no: '1',
  order_credate_time: '1970-01-01 00:00:00',
  order_category: 'TestCase^AlipayGem^Ruby',
  order_item_name: 'item',
  order_amount: '0.01',
  buyer_account_no: '2088123123',
  buyer_bind_mobile: '13600000000',
  buyer_reg_date: '1970-01-01 00:00:00',
  terminal_type: 'WAP'
}, {
  sign_type: 'RSA',
  key: RSA_PRIVATE_KEY
})

ARGUMENTS

Key Requirement Description
order_no optional Order id in your application.
order_credate_time optional Order created time.
order_category optional Categories of Order's items. using ^ as splitter.
order_item_name optional Order subject.
order_amount optional Order item's price.
buyer_account_no optional User id in your application.
buyer_reg_date optional User created time.
buyer_bind_mobile optional User mobile phone.
terminal_type optional The terminal type which user are using to request the payment, can be MOBILE for App, WAP for mobile, WEB for PC.

验证通知

Name

notify_verify

Definition

Alipay::Wap::Notify.verify?({PARAMS}, {OPTIONS})

Example

# Rails
# params except :controller_name, :action_name, :host, etc.
notify_params = params.except(*request.path_parameters.keys)

Alipay::Wap::Notify.verify?(notify_params)

Contributing

Bug report or pull request are welcome.

Make a pull request

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Please write unit test with your code if necessary.

Donate

Donate to maintainer let him make this gem better.

Alipay donate link: http://chloerei.com/donate/ .