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