# JdPay A unofficial jdpay ruby gem. Thanks for [alipay](https://github.com/chloerei/alipay) and [wx_pay](https://github.com/jasl/wx_pay) JdPay official document: http://payapi.jd.com/. ## Installation Add this line to your application's Gemfile: ```ruby gem 'jdpay' ``` or development version ```ruby gem 'jdpay', :github => 'genkin-he/jdpay' ``` And then execute: ```sh $ bundle ``` ## Configuration ```ruby require 'jd_pay' # NOTE: 京东支付与京东付款码支付是两套账号密钥. # 京东支付配置 JdPay.mch_id = 'YOUR_MERCHANT_NUM' JdPay.des_key = 'YOUR_3DES_KEY' JdPay.md5_key = 'YOUR_MD5_KEY' JdPay.pri_key = 'YOUR_RSA_PRIVATE_KEY' # 京东付款码支付配置 JdPay.qr_mch_id = 'YOUR_MERCHANT_NUM' JdPay.qr_des_key = 'YOUR_3DES_KEY' JdPay.qr_pri_key = 'YOUR_RSA_PRIVATE_KEY' #JdPay.pub_key = 'JDPAY_RSA_PUBLIC_KEY' #JdPay.debug_mode = true # Enable parameter check. Default is true. ``` You can set default key, or pass a key directly to service method: ```ruby Service.uniorder({ tradeNum: 'TRADE_NUM', }, { mch_id: 'YOUR_MERCHANT_NUM', des_key: 'YOUR_3DES_KEY', md5_key: 'YOUR_MD5_KEY', pri_key: 'YOUR_RSA_PRIVATE_KEY' }) ``` ## Service(京东支付账户) Check **[JdPay official document](http://payapi.jd.com/)** for detailed request params and return fields ### 统一下单接口 #### Name && Description > 商户系统先调用该接口在京东支付服务后台生成交易单,再按扫码、APP等不同场景发起支付 ```ruby uniorder ``` #### Definition ```ruby JdPay::Service.uniorder(params, options = {}) ``` #### Example ```ruby # required fields # [:tradeNum, :tradeName, :amount, :orderType, :notifyUrl, :userId] params = { tradeNum: '123456780', tradeName: '测试商品', amount: '1', orderType: '0', notifyUrl: 'http://making.dev/notify', userId: '123456780' } result = JdPay::Service.uniorder(params) # Used for app signData = JdPay::Sign.md5_sign(result['jdpay']['orderId'], options) ``` ### 在线支付接口PC #### Name && Description > 支付请求接口提供给商户向京东支付服务发送支付请求数据集合,京东支付服务会根据请求数据验证商户身份,以及验证支付信息是否被篡改。验证通过后,京东支付服务会在当前页面弹出支付页面弹框。 ```ruby pc_pay ``` #### Definition ```ruby JdPay::Service.pc_pay(params, options = {}) ``` #### Example ```ruby # required keys # [:tradeNum, :tradeName, :amount, :orderType, :notifyUrl, :callbackUrl, :userId] params = { tradeNum: '12345678', tradeName: '测试商品', amount: '1', orderType: '0', notifyUrl: 'http://making.dev/notify', callbackUrl: 'http://frontend.com/return', userId: "0000001" } JdPay::Service.pc_pay(params) ``` ### 在线支付接口H5 #### Name && Description > 在线支付接口的手机版本,用法参照在线支付PC接口,不再赘述。 ```ruby h5_pay ``` #### Definition ```ruby JdPay::Service.pc_pay(params, options = {}) ``` ### 交易查询接口 #### Name && Description > 交易查询接口是为了处理商户服务器长时间没有接收到支付结果的情况设计的。一般情况,支付结果会通过前端同步返回和京东支付服务器的异步通知发送到商户服务。但是为避免特殊情况商户服务器仍然没有接收到支付结果,这时候商户服务可以通过主动查询交易结果的接口查询支付状态。 ```ruby query ``` #### Definition ```ruby JdPay::Service.query(params, options = {}) ``` #### Example ```ruby # required keys: # cost trade query [:tradeNum, :tradeType] # refund trade query [:tradeNum, :oTradeNum, :tradeType] params = { tradeNum: '12345678', tradeType: '1', oTradeNum: "12345677", } JdPay::Service.query(params) ``` ### 退款申请接口 #### Name && Description > 退款申请接口提供给商户发起自动退款的能力。如果用户在商户系统下单支付以后发起退款,商户验证通过之后可以自动发起退款请求。同时京东支付商户管理后台提供手动退款的功能。 ```ruby refund ``` #### Definition ```ruby JdPay::Service.refund(params, options = {}) ``` #### Example ```ruby # refund required keys [:tradeNum, :oTradeNum, :amount, :notifyUrl] params = { tradeNum: '12345678', oTradeNum: "12345677", amount: '1', notifyUrl: 'http://making.dev/notify', } JdPay::Service.refund(params) ``` ### 撤销申请接口 #### Name && Description > 撤销申请接口提供给商户发起自动撤销的能力。对于未支付的订单撤销后不可再次支付,对于支付成功的订单则发起退款。 ```ruby revoke ``` #### Definition ```ruby JdPay::Service.revoke(params, options = {}) ``` #### Example ```ruby # revoke required keys [:tradeNum, :oTradeNum, :amount, :notifyUrl] params = { tradeNum: '12345678', oTradeNum: "12345677", amount: '1', } JdPay::Service.revoke(params) ``` ### 异步通知解密验签 #### Name && Description > 商户后台将收到的京东异步通知XML内容解密及验签. ```ruby notify_verify ``` #### Definition ```ruby JdPay::Service.notify_verify(xml_str, options = {}) ``` #### Example ```ruby # notify_verify required xml_str notyfy_xml = <<-EOF V2.0 22294531 000000 成功 MWM0MjhjYjk3YjhjNzZiNThjNjc0YmY1ZWJlY2QyODU0YTc5NmQ3ZWQxMWU1NzE3MWQ0OTUwOGI5NzllYmE4ZjM1YzRiZjlmYWE1M2ZiYjVjYTg5YjA4NTdhMjg3NTBhNzQxM2ZjOWFlN2U3YTNlYzM5ZTI5OTBkZDczNzQ5MjhjM2UxMjhkYWJhMGM0NWY2MWFjYjg2YWFlZDBjOTQ1Y2UyOWNlMDg2MmViOTQ3ZDUyZTczOTMxYjM0NGQwZTNjZGVjZTNkY2EwZmZlYzZlODE1Njc3YWMzODcyNTRhYTcyZDc5MjNhYzc5YWIzZGM0ZGIwYWE4NTc3ZTRhNmE3YmMxMjIwMmEyZmRjMDgxNjhlZjQ5ODVlNGIwNmU2ZTVjZjk3MWRlMmQ5NWYxMmJjNjQ3ZTY3MzhhNzRlOGJlMThlNzY0ZjJkYTAwODJjODNlMTlhZThlMjliYjIwZDVlNGM5NmNiZjJiZmZiNzViOWM2ZTE5Yjk5NWNlNGFhYjc5OTRhZmEyYzA4NjFiZmQ4OGM3ZmIwMzdjODlkOTU4MWQ1ZTc5MGY0NjIxZDY5M2ZjNzRiZDIwMTMyMGM5N2I5NzM1YjlkOTJjNDc5NTg5NzZlNTk0ZTJjMWZkNzU2YjAzOTFiMTRjZWI0MzJjNzhjNmVhNGY3OTM0MWU4NGI5Y2FmY2VjNWU3NGNlY2E1MjBiOTdlYjNiYmFkZDkyNmJhOWI3OTI4ZGQ5NTczMDY0ZmFiMjc5NzBkMmQ2ZTljMjM1MTM4N2E4MDhkZmUzMzc3Yzg5M2EzM2I0ZmU4MTA0MjA5YjA2YzUzMDZlNzNjNDQzZGU5OWRmMjk0YzU2YTUwMGZiYWMyNzhiOTVmM2ExMDk1NzFlZDE5NTZhMzM5MjI1Mjk3NmVlMjYwODJjOWMyNjUyMDllMzE4ZTBmMTY0MDgzYTU0ODMyOTFmNTFhMTcyMGYwMTQwOTg1NjdkYjZkZGZhZjI5NzE1ZTA5YjFhNDczNjZkNTY3MDYwZDRmZmIzZjVjNjgyZTczZjFmNjJmY2YxYWE1NDAxZDk4NDE0NjdhZDE5OTMxZGZkZDdjNWI0YzZlNTkzNjU3OGRkZTA1MmNhM2JiZDhmYjg3NWE3NDY2NjA0YTU0M2ExOWNiZjQyNzlhM2UyMDc3MzI3YjI3NWFlYjQ3ZmU3NjMyZTAxN2E4ZmZkY2UyZjg3M2I2ZTcwYTE4Y2MzNWE3YjFiNmZjYzJkY2E4MjNkZGNmNmFhOWRlZWQzYjE3NTI5MGQ5NDZkMTQ5NmFhZjJiOGM0OGEwNzU3OGM4ODIzZTVhNTU2YjU1OTk5ZTJiMjEwYmYzMjFmN2M5MmU3Yzc2NjJiMzdmNmI1Y2JjNjFiYjllYjY0Zjc3NWMwMDVlNGY4YmVjNzhmZWNmZGFmNWJkNjc2ODY1ZTAwYzllODRkNjg2ZDNmZTBjOTJiOTYwMjlmMWIxYThjMzQzYmE3YzkxNTUzMDI4OTBjYzU0YTJiMGM2Yjg1ZTQ= EOF JdPay::Service.notify_verify(notyfy_xml) ``` ### 用户关系查询接口 #### Name && Description > 若商户用户与京东用户关联,下次支付时可跳过身份识别环境进行支付。此接口提供了用户关系查询功能。 ```ruby user_relation ``` #### Definition ```ruby JdPay::Service.user_relation(params, options = {}) ``` #### Example ```ruby # user_relation required keys [:userId] params = { userId: '12345678' } JdPay::Service.user_relation(params) ``` ### 用户关系解绑接口 #### Name && Description > 解绑用户关系,解绑后,用户下一次支付,需重新通过手机等登录方式进行身份验证。 ```ruby cancel_user ``` #### Definition ```ruby JdPay::Service.cancel_user(params, options = {}) ``` #### Example ```ruby # cancel_user required keys [:userId] params = { userId: '12345678' } JdPay::Service.cancel_user(params) ``` ## QrService(京东付款码账户) ### 京东付款码支付接口 #### Name && Description > 付款码支付接口用于客户使用付款码支付时,商户使用扫码枪完成一键下单并支付功能。在支付过程中对支付请求进行校验后,完成支付流程。 ```ruby qrcode_pay ``` #### Definition ```ruby JdPay::QrService.qrcode_pay(params, options = {}) ``` #### Example ```ruby # required fields # [:tradeNum, :tradeName, :amount, :device, :token] params = { tradeNum: '123456780', tradeName: '测试商品', amount: '1', device: '0001', token: '2563256985478547856' } JdPay::QrService.qrcode_pay(params) ``` ### 京东付款码交易查询 #### Definition ```ruby JdPay::QrService.query(params, options = {}) ``` #### Example ```ruby # refer to:JdPay::Service.query(params, options = {}) ``` ### 京东付款码交易退款 #### Definition ```ruby JdPay::QrService.refund(params, options = {}) ``` #### Example ```ruby # refer to:JdPay::Service.refund(params, options = {}) ``` ### 京东付款码异步通知解密验签 #### Definition ```ruby JdPay::QrService.notify_verify(params, options = {}) ``` #### Example ```ruby # refer to:JdPay::Service.notify_verify(params, options = {}) ``` ## 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. ## License The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). ## Donate Donate to maintainer let him make this gem better. [donate link](https://ruby-china.org/hemengzhi88).
alipay