module Cmbpay::Service

Constants

DO_BUSINESS_GATEWAY_URL
DO_REFUND_GATEWAY_URL
DO_REFUND_REQUIRED_REQ_DATA
MB_APPQRPAY_GATEWAY_URL
MB_APPQRPAY_REQUIRED_REQ_DATA
PUBLIC_URL
QUERY_ACCOUNTlIST_GATEWAY_URL
QUERY_ACCOUNTlIST_REQUIRED_REQ_DATA
QUERY_REFUND_BY_DATE_GATEWAY_URL
QUERY_REFUND_BY_DATE_REQUIRED_REQ_DATA
QUERY_SETTLED_ORDER_BY_MERCHANT_DATE_GATEWAY_URL
QUERY_SETTLED_ORDER_BY_MERCHANT_DATE_REQUIRED_REQ_DATA
QUERY_SETTLED_REFUND_GATEWAY_URL
QUERY_SETTLED_REFUND_REQUIRED_REQ_DATA
QUERY_SINGLE_ORDER_GATEWAY_URL
QUERY_SINGLE_ORDER_REQUIRED_REQ_DATA
SANDBOX_DO_BUSINESS_GATEWAY_URL
SANDBOX_DO_REFUND_GATEWAY_URL
SANDBOX_MB_APPQRPAY_GATEWAY_URL
SANDBOX_PUBLIC_URL
SANDBOX_QUERY_ACCOUNTlIST_GATEWAY_URL
SANDBOX_QUERY_REFUND_BY_DATE_GATEWAY_URL
SANDBOX_QUERY_SETTLED_ORDER_BY_MERCHANT_DATE_GATEWAY_URL
SANDBOX_QUERY_SETTLED_REFUND_GATEWAY_URL
SANDBOX_QUERY_SINGLE_ORDER_GATEWAY_URL

Public Class Methods

do_business(req_data={}, options = {}) click to toggle source

查询招行公钥API

# File lib/cmbpay/service.rb, line 48
def self.do_business(req_data={}, options = {})
  req_data = Utils.stringify_keys(req_data)
  params = {
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
        'txCode'     => 'FBPK'
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end
mb_appqrpay(req_data, options = {}) click to toggle source

二维码支付API

# File lib/cmbpay/service.rb, line 28
def self.mb_appqrpay(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, MB_APPQRPAY_REQUIRED_REQ_DATA)

  params = {
    'charset'         => 'utf-8',
    'jsonRequestData' => {
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
        'date'       => Time.now.strftime('%Y%m%d'),
      }.merge(req_data)
    }
  }

  request_args(get_gateway_url(__method__), sign_params(params, options))
end
query_single_order(req_data, options = {}) click to toggle source

查询单笔订单API

# File lib/cmbpay/service.rb, line 104
def self.query_single_order(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, QUERY_SINGLE_ORDER_REQUIRED_REQ_DATA)
  if req_data['type'] == 'A'
    warn("Cmbpay Warn: must have bankSerialNo if type is A") unless req_data.keys.include? 'bankSerialNo'
  else
    warn("Cmbpay Warn: must have orderNo if type is B") unless req_data.keys.include? 'orderNo'
  end

  params = {
    'charset'  => 'utf-8',
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end

Private Class Methods

check_required_params(options, names) click to toggle source
# File lib/cmbpay/service.rb, line 224
def check_required_params(options, names)
  return unless Cmbpay.debug_mode?
  names.each do |name|
    warn("Cmbpay Warn: missing required option: #{name}") unless options.has_key?(name)
  end
end
get_gateway_url(method) click to toggle source
# File lib/cmbpay/service.rb, line 184
def get_gateway_url(method)
 prefix = Cmbpay.sandbox_mode ? 'SANDBOX_' : ''
 self.const_get("#{prefix}#{method.upcase}_GATEWAY_URL")
end
request_args(gateway_url, params, options = {}) click to toggle source
# File lib/cmbpay/service.rb, line 189
def request_args(gateway_url, params, options = {})
  gateway_url = options.delete(:gateway_url) || gateway_url
  params['jsonRequestData'] = JSON.generate params['jsonRequestData']
  {
    method: options[:method] || :post,
    url: gateway_url,
    payload: params,
  }
end
request_remote(gateway_url, params, options = {}) click to toggle source
# File lib/cmbpay/service.rb, line 199
def request_remote(gateway_url, params, options = {})
  options = Cmbpay.extra_rest_client_options.merge(options)
  gateway_url = options.delete(:gateway_url) || gateway_url
  params['jsonRequestData'] = JSON.generate params['jsonRequestData']

  RestClient::Request.execute(
    {
      method: options[:method] || :post,
      url: gateway_url,
      payload: params,
      headers: { content_type: 'application/x-www-form-urlencoded' }
    }.merge(options)
  ).body
end
sign_params(params, options = {}) click to toggle source
# File lib/cmbpay/service.rb, line 214
def sign_params(params, options = {})
  options['key'] ||= Cmbpay.key
  params['jsonRequestData'].merge!(
    'version'  => '1.0',
    'signType' => 'SHA-256',
    'sign'     => Sign.generate(params['jsonRequestData']['reqData'], options)
  )
  params
end

Public Instance Methods

do_refund(req_data, options = {}) click to toggle source

退款API

# File lib/cmbpay/service.rb, line 129
def do_refund(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, DO_REFUND_REQUIRED_REQ_DATA)
  params = {
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end
query_accountList(req_data, options = {}) click to toggle source

查询入账明细API

# File lib/cmbpay/service.rb, line 86
def query_accountList(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, QUERY_ACCOUNTlIST_REQUIRED_REQ_DATA)
  params = {
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end
query_refund_by_date(req_data, options = {}) click to toggle source

按退款日期查询退款API

# File lib/cmbpay/service.rb, line 147
def query_refund_by_date(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, QUERY_REFUND_BY_DATE_REQUIRED_REQ_DATA)
  params = {
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end
query_settled_order_by_merchant_date(req_data, options = {}) click to toggle source

按商户日期查询已结账订单API

# File lib/cmbpay/service.rb, line 67
def query_settled_order_by_merchant_date(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, QUERY_SETTLED_ORDER_BY_MERCHANT_DATE_REQUIRED_REQ_DATA)
  params = {
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end
query_settled_refund(req_data, options = {}) click to toggle source

已处理退款查询API

# File lib/cmbpay/service.rb, line 165
def query_settled_refund(req_data, options = {})
  req_data = Utils.stringify_keys(req_data)
  check_required_params(req_data, QUERY_SETTLED_REFUND_REQUIRED_REQ_DATA)
  params = {
    'jsonRequestData' => {
      'charset'  => 'utf-8',
      'reqData'  => {
        'merchantNo' => options.delete(:merchantNo) || Cmbpay.merchant_no,
        'branchNo'   => options.delete(:branchNo) || Cmbpay.branch_no,
        'dateTime'   => Time.now.strftime('%Y%m%d%H%M%S'),
      }.merge(req_data)
    }
  }
  request_remote(get_gateway_url(__method__), sign_params(params, options))
end