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