谷歌了,好像没有什么类似的错误。 先说下我这里微信支付的流程: 下单之后,到订单详情页面。在订单详情页面点击微信支付,然后用 ajax 到 pay 页面去统一下单,签名,之后返回 json 数据给 ajax 的回调函数。 现在出现的问题是: 微信里点击微信支付之后,只是闪现了微信支付的等待的 Logo. 用 nw.js sdk 测试,是提示跳转到订单详情页面,config 注入成功。在点击微信支付之后,出现
[JSSDK Info] chooseWXPay
input {"timeStamp":"1468636652","nonceStr":"xxxxxxxxxxxxxxxxxxxx","package":"prepay_id=xxxxxxxxxxxxxxxxxxx","paySign":"xxxxxxxxxxxxxxxxxxxxx","signType":"MD5"};
output {"errMsg":"没有此SDK或暂不支持此SDK模拟"}
开发的环境是本地的 nginx 把微信后台设置的域名转发到本地。 订单详情页的 js 代码如下:
$(document).on('click', 'li.js-crm-wechat-to-pay', function(){
var orderId = $(this).data("id");
console.log("开始点击了微信支付");
$.ajax({
url: "/crm/store_orders/pay/",
method: 'get',
dataType: 'json',
success: function(data){
console.log(data);
if(data.status == true){
console.log("成功在js里回调了,status是true!");
wx.chooseWXPay({
"timestamp": data.pay_params['timeStamp'],
"nonceStr": data.pay_params['nonceStr'],
"package": data.pay_params['package'],
"signType": data.pay_params['signType'],
"paySign": data.pay_params['paySign'], // 支付签名
success: function (res) {
}
});
}else {
console.log(data.msg);
}
},
error: function(XMLHttpRequest){
console.log("出错了,错误如下:");
console.log(XMLHttpRequest);
}
});
});
支付的方法:
def pay
#功能测试通过之后抽取出去
@store_order = StoreOrder.last#find(params[:id])
params = {
body: @store_order.orderable_name,
out_trade_no: @store_order.numero,
total_fee: (@store_order.amount * 100).to_i, # 需要转换为分
spbill_create_ip: request.remote_ip || '127.0.0.1',
notify_url: weixin_notify_pay_notify_path,
trade_type: "JSAPI",
nonce_str: SecureRandom.hex,
openid: session[:openid]
}
@result = WxPay::Service.invoke_unifiedorder(params)
@sign_package = $weixin_client.get_jssign_package(request.url)
if @result.nil?
Rails.logger.info "这里的@result是nil"
render json: {status: false, error: '签名是空的.'}
else
if @result['return_code']=='FAIL'
Rails.logger.info "这里的@result是FAIL"
render json: {status: false, msg: "#{@result.to_s},#{params.to_s}"}
else
@pay_ticket_param = {
timeStamp: @sign_package["timestamp"],
nonceStr: @sign_package["nonceStr"],
package: "prepay_id=#{@result['prepay_id']}",
signType: "MD5",
appId: WxPay.appid
}
@pay_ticket_param = {
paySign: WxPay::Sign.generate(@pay_ticket_param)
}.merge(@pay_ticket_param)
Rails.logger.info "这里的是成功返回#{@pay_ticket_param}"
render json: {status: true, pay_params: @pay_ticket_param}
end
end
end
这里
@pay_ticket_param
在 js 的回调里是有正常输出。
路由如下:
collection do
get :pay, trailing_slash: true
end
测试授权目录是: http://example.com/crm/store_orders/pay/ js 安全域:example.com 两个疑问: