README.md in alipay-0.14.0 vs README.md in alipay-0.15.0
- old
+ new
@@ -1,784 +1,52 @@
# Alipay
-A unofficial alipay ruby gem.
+Unofficial alipay ruby gem.
-Alipay official document: https://b.alipay.com/order/techService.htm .
+Note: Alipay::Client Api have not enough feedback in production yet, please fully test in your staging environment before production. You can find legacy API document [here](doc/legacy_api.md).
+You should read [https://doc.open.alipay.com](https://doc.open.alipay.com) before using this gem.
+
## Installation
Add this line to your application's Gemfile:
```ruby
-gem 'alipay', '~> 0.14.0'
+gem 'alipay', '~> 0.15.0'
```
-And then execute:
+Then run:
```console
$ bundle
```
-## Configuration
+## Usage
```ruby
-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:
-
-```ruby
-Service.create_partner_trade_by_buyer_url({
- out_trade_no: 'OUT_TRADE_NO',
- # Order params...
-}, {
- pid: 'ANOTHER_PID',
- key: 'ANOTHER_KEY',
-})
-```
-
-## Service
-
-### 担保交易收款接口
-
-#### Name
-
-```ruby
-create_partner_trade_by_buyer
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.create_partner_trade_by_buyer_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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'
+alipay_client = Alipay::Client.new(
+ url: 'https://openapi.alipaydev.com/gateway.do',
+ app_id: '2016000000000000',
+ app_private_key: APP_PRIVATE_KEY,
+ alipay_public_key: ALIPAY_PUBLIC_KEY
)
-# => '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
-
-```ruby
-send_goods_confirm_by_platform
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.send_goods_confirm_by_platform({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-Alipay::Service.send_goods_confirm_by_platform(
- trade_no: '201504010000001',
- logistics_name: 'example.com',
- transport_type: 'DIRECT'
+alipay_client.page_execute_url(
+ method: 'alipay.trade.page.pay',
+ biz_content: {
+ out_trade_no: '20160401000000',
+ product_code: 'FAST_INSTANT_TRADE_PAY',
+ total_amount: '0.01',
+ subject: 'test'
+ }.to_json, # to_json is important!
+ timestamp: '2016-04-01 00:00:00'
)
-# => '<!xml version="1.0" encoding="utf-8"?><alipay><is_success>T</is_success></alipay>'
+# => 'https://openapi.alipaydev.com/gateway.do?app_id=201600...'
```
-#### Arguments
+Read [Alipay::Client](lib/alipay/client.rb) for usage detail.
-| 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
-
-```ruby
-create_direct_pay_by_user
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.create_direct_pay_by_user_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-alipay.wap.create.direct.pay.by.user
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.create_direct_pay_by_user_wap_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-create_forex_trade_wap
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.create_forex_trade_wap_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-refund_fastpay_by_platform_pwd
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.refund_fastpay_by_platform_pwd_url
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-close_trade
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.close_trade({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-single_trade_query
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.single_trade_query({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-create_forex_trade
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.create_forex_trade_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-forex_refund
-```
-
-#### Definition
-
-```ruby
-Alipay::Service.forex_refund_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-account.page.query
-```
-
-#### Definition
-
-```ruby
-Alipay::Service::account_page_query({PARAMS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-batch_trans_notify
-```
-
-#### Definition
-
-```ruby
-Alipay::Service::batch_trans_notify_url({PARAMS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-notify_verify
-```
-
-#### Definition
-
-```ruby
-Alipay::Notify.verify?({PARAMS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-# Rails
-# params except :controller_name, :action_name, :host, etc.
-notify_params = params.except(*request.path_parameters.keys)
-
-Alipay::Notify.verify?(notify_params, options = {})
-```
-
-## Mobile::Service
-
-### 移动支付接口
-
-#### Name
-
-```ruby
-mobile.securitypay.pay
-```
-
-#### Definition
-
-```ruby
-Alipay::Mobile::Service.mobile_securitypay_pay_string({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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 .
-
-### APP支付接口
-
-#### Name
-
-```ruby
-alipay.trade.app.pay
-```
-
-#### Definition
-
-```ruby
-Alipay::App::Service.alipay_trade_app_pay({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-biz_content = {
- 'body': body, 'out_trade_no': out_trade_no, 'passback_params': passback_params,
- 'product_code': 'QUICK_MSECURITY_PAY', 'subject': subject, 'total_amount': total_amount
-}.to_json
-
-Alipay::App::Service.alipay_trade_app_pay(
- notify_url: 'https://example.com/orders/20150401000-0001/notify',
- app_id: '1234567890',
- biz_content: biz_content
-)
-# => service="alipay.trade.app.pay"&_input_charset="utf-8"&partner=...
-```
-
-#### ARGUMENTS
-
-| Key | Requirement | Description |
-| --- | ----------- | ----------- |
-| app_id | required | Application-assigned id |
-| out_trade_no | required | Order number in your application. |
-| notify_url | required | Alipay asyn notify url. |
-| subject | required | Order subject. |
-| total_amount | required | Order total price. |
-| body | required | Order body, less than 512 bytes. |
-| biz_content | required | A list of business parameters |
-
-\* This service only support RSA sign_type.
-
-This is not a complete list of arguments, please read official document: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.vwh1xQ&treeId=193&articleId=105465&docType=1 .
-
-#### APP支付验证通知
-
-```ruby
-Alipay::App::Sign.verify?(params)
-```
-
-## Wap::Service
-
-### 授权接口
-
-#### Name
-
-```ruby
-alipay.wap.trade.create.direct
-```
-
-#### Definition
-
-```ruby
-Alipay::Wap::Service.trade_create_direct_token({ARGUMENTS}, {OPTIONS}}
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-alipay.wap.auth.authAndExecute
-```
-
-#### Definition
-
-```ruby
-Alipay::Wap::Service.auth_and_execute_url({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-Alipay::Wap::Service.auth_and_execute_url(request_token: token)
-```
-#### ARGUMENTS
-
-| Key | Requirement | Description |
-| --- | ----------- | ----------- |
-| request_token | required | Get from trade_create_direct_token |
-
-### 风险探测服务接口
-
-#### Name
-
-```ruby
-alipay.security.risk.detect
-```
-
-#### Definition
-
-```ruby
-Alipay::Wap::Service.security_risk_detect({ARGUMENTS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-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
-
-```ruby
-notify_verify
-```
-
-#### Definition
-
-```ruby
-Alipay::Wap::Notify.verify?({PARAMS}, {OPTIONS})
-```
-
-#### Example
-
-```ruby
-# 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
@@ -789,10 +57,8 @@
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
+## License
-Donate to maintainer let him make this gem better.
-
-Alipay donate link: http://chloerei.com/donate/ .
+MIT License