module Cpay::Sand::Draw

Public Instance Methods

agentpay(c_params) click to toggle source
# File lib/cpay.rb, line 204
def agentpay(c_params)
  b_params = {
      uri: URI("https://caspay.sandpay.com.cn/agent-main/openapi/agentpay"),
      pt: {
          orderCode: c_params[:orderid].to_s,
          version: '01',
          productId: '00000004',
          tranTime: c_params[:tranTime],
          tranAmt: c_params[:amount].to_s.rjust(12, '0'),
          currencyCode: '156',
          accAttr: '0',
          accType: '4',
          accNo: c_params[:accno],
          accName: c_params[:accname],
          remark: c_params[:remark],
      },
      transCode: 'RTPM',
  }

  ret = base_draw_act b_params, c_params
  ret[:cpay] = {
      msg: ret[:data]['respDesc'],
      ok: ret[:code] == 0 && (ret[:data]['resultFlag'] == '0'),
      next: ret[:code] != 0 || ret[:data]['resultFlag'] == '2',
      tranTime: c_params[:tranTime],
      orderid: c_params[:orderid].to_s,
      flag: ret[:data]['resultFlag']
  }
  ret
end
queryBalance(c_params) click to toggle source
# File lib/cpay.rb, line 235
def queryBalance(c_params)
  b_params = {
      uri: URI("https://caspay.sandpay.com.cn/agent-main/openapi/queryBalance"),
      pt: {
          orderCode: c_params[:orderid].to_s,
          version: '01',
          productId: '00000004',
          tranTime: Time.now.strftime('%Y%m%d%H%M%S'),
      },
      transCode: 'MBQU',
  }

  ret = base_draw_act b_params, c_params
  ret[:cpay] = {
      ok: ret[:code] == 0 && ret[:data]['respCode'] == '0000',
      msg: ret[:data]['balance'].to_i,
      balance: ret[:data]['balance'].to_i
  }
  ret

end
queryOrder(c_params) click to toggle source
# File lib/cpay.rb, line 257
def queryOrder c_params
  b_params = {
      uri: URI("https://caspay.sandpay.com.cn/agent-main/openapi/queryOrder"),
      pt: {
          orderCode: c_params[:orderid].to_s,
          version: '01',
          productId: '00000004',
          tranTime: c_params[:tranTime],
      },
      transCode: 'ODQU',
  }
  ret = base_draw_act b_params, c_params
  ret[:cpay] = {
      ok: ret[:code] == 0 && ret[:data]['resultFlag'] == '0',
      next: ret[:code] != 0 || ret[:data]['resultFlag'] == '2',
      msg: ''
  }
  ret
end

Private Instance Methods

base_draw_act(b_params, c_params) click to toggle source
# File lib/cpay.rb, line 279
def base_draw_act(b_params, c_params)

  ret = {
      code: -1,
      msg: '',
      data: {}
  }
  begin

    uri = b_params[:uri]
    pt = b_params[:pt]
    aes_key = rand(36 ** 16).to_s(36).rjust(16, '0')
    data = {
        transCode: b_params[:transCode],
        accessType: '0',
        merId: c_params[:mid],
        encryptKey: Utils.rsa_encrypt_by_pub(aes_key, c_params[:publickey]),
        encryptData: Utils.aes_encrypt(pt.to_json, aes_key),
        sign: Utils.rsa_sign(pt.to_json, c_params[:privatekey]),
    }
    puts data
    res = Net::HTTP.post_form uri, data
    res_param = {}
    body = res.body
    body[0] = ''
    body[-1] = ''
    Utils.url_decode(body).split('&').each do |str|
      str_split = str.split('=')
      res_param[str_split[0]] = str_split[1]
    end
    res_data = Utils.aes_decrypt(res_param['encryptData'], Utils.rsa_decrypt_by_pri(res_param['encryptKey'], c_params[:privatekey]))

    if Utils.rsa_verify(res_data, res_param['sign'], c_params[:publickey])
      ret[:code] = 0
      ret[:data] = JSON(res_data)
    else
      ret[:code] = 2
      ret[:msg] = "签名错误"
    end
  rescue Exception => ex
    ret[:msg] = ex.to_s
    ret[:code] = -1
  end
  ret
end