module JdPay::Service
Constants
- CANCEL_USER_URL
- H5_PAY_URL
- PC_PAY_URL
- QRCODE_PAY_URL
- QRCODE_REQUIRED_FIELDS
- QUERY_REQUIRED_FIELDS
- QUERY_URL
- REFUND_REQUIRED_FIELDS
- REFUND_URL
- REVOKE_REQUIRED_FIELDS
- REVOKE_URL
- UNIORDER_REQUIRED_FIELDS
- UNIORDER_URL
- USER_RELATION_REQUIRED_FIELDS
- USER_RELATION_URL
- WEB_PAY_REQUIRED_FIELDS
Public Class Methods
cancel_user(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 88 def cancel_user(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, }.merge(params) check_required_options(params, USER_RELATION_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(CANCEL_USER_URL, make_payload(params), options)), options) end
h5_pay(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 22 def h5_pay(params, options = {}) web_pay(params, H5_PAY_URL, options = {}) end
notify_verify(xml_str, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 144 def notify_verify(xml_str, options = {}) JdPay::Result.new(Hash.from_xml(xml_str), options) end
pc_pay(params, options = {})
click to toggle source
the difference between pc and h5 is just request url
# File lib/jd_pay/service.rb, line 18 def pc_pay(params, options = {}) web_pay(params, PC_PAY_URL, options = {}) end
qrcode_pay(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 61 def qrcode_pay(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, tradeTime: Time.now.strftime("%Y%m%d%H%M%S"), currency: "CNY" }.merge(params) check_required_options(params, QRCODE_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(QRCODE_PAY_URL, make_payload(params), options)), options) end
query(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 116 def query(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, tradeType: '0' }.merge(params) check_required_options(params, QUERY_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(QUERY_URL, make_payload(params), options)), options) end
refund(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 101 def refund(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, tradeTime: Time.now.strftime("%Y%m%d%H%M%S"), currency: "CNY" }.merge(params) check_required_options(params, REFUND_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(REFUND_URL, make_payload(params), options)), options) end
revoke(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 130 def revoke(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, tradeTime: Time.now.strftime("%Y%m%d%H%M%S"), currency: "CNY" }.merge(params) check_required_options(params, REVOKE_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(REVOKE_URL, make_payload(params), options)), options) end
uniorder(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 46 def uniorder(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, tradeTime: Time.now.strftime("%Y%m%d%H%M%S"), currency: "CNY" }.merge(params) check_required_options(params, UNIORDER_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(UNIORDER_URL, make_payload(params), options)), options) end
user_relation(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 76 def user_relation(params, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, }.merge(params) check_required_options(params, USER_RELATION_REQUIRED_FIELDS) params[:sign] = JdPay::Sign.rsa_encrypt(JdPay::Util.to_xml(params), options) JdPay::Result.new(Hash.from_xml(invoke_remote(USER_RELATION_URL, make_payload(params), options)), options) end
web_pay(params, url, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 27 def web_pay(params, url, options = {}) params = { version: "V2.0", merchant: options[:mch_id] || JdPay.mch_id, tradeTime: Time.now.strftime("%Y%m%d%H%M%S"), currency: "CNY" }.merge(params) check_required_options(params, WEB_PAY_REQUIRED_FIELDS) sign = JdPay::Sign.rsa_encrypt(JdPay::Util.to_uri(params), options) skip_encrypt_params = %i(version merchant) params.each do |k, v| params[k] = skip_encrypt_params.include?(k) ? v : JdPay::Des.encrypt_3des(v) end params[:sign] = sign JdPay::Util.build_pay_form(url, params) end
Private Class Methods
check_required_options(options, names)
click to toggle source
# File lib/jd_pay/service.rb, line 150 def check_required_options(options, names) return unless JdPay.debug_mode? names.each do |name| warn("JdPay Warn: missing required option: #{name}") unless options.has_key?(name) end end
invoke_remote(url, payload, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 166 def invoke_remote(url, payload, options = {}) options = JdPay.extra_rest_client_options.merge(options) RestClient::Request.execute( { method: :post, url: url, payload: payload, headers: { content_type: 'application/xml' } }.merge(options) ) end
make_payload(params, options = {})
click to toggle source
# File lib/jd_pay/service.rb, line 157 def make_payload(params, options = {}) request_hash = { "version" => "V2.0", "merchant" => options[:mch_id] || JdPay.mch_id, "encrypt" => Base64.strict_encode64(JdPay::Des.encrypt_3des JdPay::Util.to_xml(params)) } JdPay::Util.to_xml(request_hash) end