module Cpay::Sand::Fastpay
Public Instance Methods
notify(c_params)
click to toggle source
# File lib/cpay.rb, line 98 def notify(c_params) sign = c_params[:sign] data = c_params[:data] publickey = c_params[:publickey] ret = { code: -1, msg: '', data: {} } begin if Utils.rsa_verify(data, sign, publickey) data = JSON data ret[:data] = data ret[:code] = 0 ret[:cpay] = { ok: data['body']['orderStatus'] == '1', msg: '', next: data['head']['respCode'] != '000000', } else ret[:code] = 2 end rescue Exception => ex ret[:msg] = ex.to_s ret[:code] = -1 end ret end
pay(c_params)
click to toggle source
# File lib/cpay.rb, line 62 def pay(c_params) time = Time.now.strftime('%Y%m%d%H%M%S') b_params = { body: { userId: c_params[:userid].to_s, #用户ID orderCode: c_params[:orderid].to_s, #订单号 orderTime: time, totalAmount: c_params[:amount].to_s.rjust(12, '0'), #订单金额 subject: c_params[:subject].to_s, #订单标题 body: c_params[:body].to_s, #订单描述 currencyCode: 156, notifyUrl: c_params[:notifyurl].to_s, #异步通知地址 frontUrl: c_params[:fronturl].to_s, #前端跳转地址 }, method: "sandPay.fastPay.quickPay.index" } res = base_pay_act b_params, c_params, true if res[:code] = 0 return %Q{ <form action="https://cashier.sandpay.com.cn/fastPay/quickPay/index" method="post" hidden="hidden"> <textarea name="charset">#{res[:data][:charset]}</textarea> <textarea name="signType">#{res[:data][:signType]}</textarea> <textarea name="data">#{res[:data][:data]}</textarea> <textarea name="sign">#{res[:data][:sign]}</textarea> </form> <script type="text/javascript"> document.forms[0].submit(); </script> } else return "生成订单失败,请稍后重试" end end
queryOrder(c_params)
click to toggle source
# File lib/cpay.rb, line 128 def queryOrder(c_params) b_params = { body: { orderCode: c_params[:orderid].to_s, #订单号 }, method: "sandpay.trade.query", uri: URI("https://cashier.sandpay.com.cn/gateway/api/order/query") } ret = base_pay_act b_params, c_params, false ret[:cpay] = { next: ret[:data]['head']['respCode'] == '030096', ok: ret[:data]['body']['oriRespCode'] == '000000' && ret[:data]['body']['orderStatus'] == '00', msg: ret[:data]['oriRespMsg'] } ret end
Private Instance Methods
base_pay_act(b_params, c_params, return_req_data)
click to toggle source
# File lib/cpay.rb, line 148 def base_pay_act(b_params, c_params, return_req_data) ret = { code: -1, msg: '', data: {} } begin time = Time.now.strftime('%Y%m%d%H%M%S') data = { head: { version: '1.0', method: b_params[:method], productId: '00000016', accessType: '1', mid: c_params[:mid].to_s, channelType: '07', reqTime: time }, body: b_params[:body] } req_data = { charset: 'utf-8', signType: '01', data: data.to_json, sign: Utils.rsa_sign(data.to_json, c_params[:privatekey]) } if return_req_data ret[:code] = 0 ret[:data] = req_data else res = Net::HTTP.post_form b_params[:uri], req_data puts res.body cgi_parse = CGI.parse(Utils.url_decode(res.body)) unless Utils.rsa_verify(cgi_parse['data'][0], cgi_parse['sign'][0].to_s.gsub(' ', '+'), c_params[:publickey]) ret[:code] = 2 ret[:msg] = "签名错误" else ret[:code] = 0 ret[:data] = JSON(cgi_parse['data'][0]) end end rescue Exception => ex ret[:msg] = ex.to_s ret[:code] = -1 end ret end