1泻红、安裝
gem 'wx_pay', :git => 'git://github.com/jasl/wx_pay'
2壤躲、后臺api
params = {
? ?body: "在#{@order.shop.name}消費了#{@order.total_fee}元", ? ?# ?訂單顯示的文字
? ?out_trade_no: @order.sn, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 訂單唯一碼,后臺生成
? ? total_fee: (@order.total_fee * 100).to_i, ? ? ? ? ? ? ? # 訂單總價秘蛇,必須為整型
? ? spbill_create_ip: '120.55.164.64', ? ? ? ? ? ? ? ? ? ? ? ?# 訂單ip其做,服務器ip
? ? notify_url: 'http://www.jiancan.me/pay_notify', ? # 支付回調(diào)函數(shù)
? ? trade_type: 'JSAPI', # could be "JSAPI", "NATIVE" or "APP", ?# H5端用JSAPI
? ? openid: "#{current_user.weixin_open_id}" # 支付類型為JSAPI時候要提供,這個是用戶
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 授權(quán)后返回的赁还。
}
r = WxPay::Service.invoke_unifiedorder params
# 申請支付返回的json數(shù)據(jù)
# => {
#? ? ? "return_code"=>"SUCCESS",
#? ? ? "return_msg"=>"OK",
#? ? ? "appid"=>"YOUR APPID",
#? ? ? "mch_id"=>"YOUR MCH_ID",
#? ? ? "nonce_str"=>"8RN7YfTZ3OUgWX5e",
#? ? ? "sign"=>"623AE90C9679729DDD7407DC7A1151B2",
#? ? ? "result_code"=>"SUCCESS",
#? ? ? "prepay_id"=>"wx2014111104255143b7605afb0314593866",
#? ? ? "trade_type"=>"JSAPI"
# }
#如果成功就執(zhí)行
if r.success? # => true
? ? timeStamp = Time.now.to_i.to_s ? ? ? ? ? ? ? # ?時間戳
? ? nonceStr = SecureRandom.uuid.tr('-', '') ? ?# ?隨機字符串
? ? # ?要以下的數(shù)據(jù)生成支付簽名
? ? params = {
? ? ? ? appId: r['appid'],
? ? ? ? timeStamp: timeStamp,
? ? ? ? nonceStr: nonceStr,
? ? ? ? package: "prepay_id=#{r['prepay_id']}",
? ? ? ? signType: 'MD5'
? ? }
? ? paySign = WxPay::Sign.generate(params) ? # 生成支付簽名
? ? # 返回支付數(shù)據(jù)給前端
? ? { "prepay_id" => r["prepay_id"], "timeStamp" => timeStamp, "nonceStr" =>
? ? nonceStr, "paySign" => paySign, "return_code" => r["return_code"], "return_msg"
? ? => r["return_msg"] }
else ? # 錯誤就返回錯誤信息
? ? { "return_code" => r["return_code"], "return_msg" => r["return_msg"],
? ? "result_code" => r["result_code"], "err_code" => r["err_code"], "err_code_des" =>
? ? r["err_code_des"] }
end
3妖泄、前端支付函數(shù)
weiXinPay () {
? ? ? let access_token = localStorage.getItem('jc_user_access_token')
? ? ? let self = this
? ? ? if (access_token !== null) {
? ? ? ? ?this.$http.get('http://jiancan.me/api/u1/pay.json', { order_id: ? ? ? ? ? ?this.$route.params.order_id, access_token: access_token }).then(function (response) {
if (response.data.result_code !== undefined && response.data.result_code === 'FAIL') {
window.alert(response.data.err_code_des)
} else {
window.wx.chooseWXPay({
timestamp: response.data.timeStamp, // 支付簽名時間戳,注意微信jssdk中的所有使用timestamp字段均為小寫秽浇。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符
nonceStr: response.data.nonceStr, // 支付簽名隨機串浮庐,不長于 32 位
package: 'prepay_id=' + response.data.prepay_id, // 統(tǒng)一支付接口返回的prepay_id參數(shù)值甚负,提交格式如:prepay_id=***)
signType: 'MD5', // 簽名方式柬焕,默認為'SHA1',使用新版支付需傳入'MD5'
paySign: response.data.paySign, // 支付簽名
success: function (res) {
// 支付成功后的回調(diào)函數(shù)
self.order.status_text = '已支付'
},
fail: function (res) {
console.log(res)
},
cancel: function (res) {
// 支付取消
}
})
}
}, function (response) {
this.showAlert(response.data.title, response.data.error, response.status)
})
}
}