起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3194|回复: 8

[结贴] 微信公众号支付40163

[复制链接]

26

主题

96

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
QQ
发表于 2017-12-14 08:51:41 | 显示全部楼层 |阅读模式
  微信公众号支付点击首页授权连接进去后通过code获得了用户的id,但当我们再去进行支付时候,提示code已经被使用,看了一下代码,支付的时候使用的是第一次进来的code,请问怎么使code每次都获取最新的呢?
发表于 2017-12-14 09:47:59 | 显示全部楼层
获取用户信息才使用到code的!  用户信息缓存就行了!
支付并不需要code啊!
http://docs.wex5.com/pay-mp-step-by-step/

你参考外卖案例的源码试试: 主要代码是:
  1. Model.prototype.payOrderByWeixinJSSDK = function(payDtd, orderID) {
  2.                 if (!navigator.WxApi) {
  3.                         payDtd.reject(-33);
  4.                         return;
  5.                 }
  6.                 var tradeNo = orderID;
  7.                 var notifyUrl = location.origin + "/baas/weixin/weixin/notify";
  8.                 this.wxApi.chooseWXPay({
  9.                         body : "x5外卖",
  10.                         mchId : "1228613502",
  11.                         notifyUrl : notifyUrl,
  12.                         outTradeNo : tradeNo,
  13.                         totalFee : "1"
  14.                 }).done(function() {
  15.                         payDtd.resolve(2);
  16.                 }).fail(function() {
  17.                         payDtd.reject(-20);
  18.                 });
  19.         };
复制代码
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

26

主题

96

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
QQ
 楼主| 发表于 2017-12-14 10:17:01 | 显示全部楼层
本帖最后由 笑看余生 于 2017-12-14 10:43 编辑

在首页登陆的时候写了如下代码,也确实获取到了用户信息




回复 支持 反对

使用道具 举报

26

主题

96

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
QQ
 楼主| 发表于 2017-12-14 10:41:52 | 显示全部楼层
liangyongfei 发表于 2017-12-14 09:47
获取用户信息才使用到code的!  用户信息缓存就行了!
支付并不需要code啊!
http://docs.wex5.com/pay-mp- ...

在首页登陆的时候写了如下代码,也确实获取到了用户信息

var self = this;
                // 获取url上的code参数 - 微信授权code,用于获取微信用户信息
                var weixinCode = this.getContext().getRequestParameter("code");
                // 判断运行环境是否在X5移动客户端中,如果在移动客户端中,则当deviceready后取手机设备uuid作为用户唯一标识
                // 判断使用app运行
                if(weixinCode !== "") {
                        this._deviceType = "wx";
                        // 判断微信环境
                        if (justep.Browser.isWeChat) {
                                this.wxApi = new navigator.WxApi("wx......");
                        }
                        else
                                {
                                //        api.popTip('请在微信里打开',23, 5);
                                }
                                Baas.sendRequest({
                                        "url" : "/weixin/weixin",
                                        "action" : "userinfo",
                                        "async" : false,
                                        "params" : {
                                                code : weixinCode
                                        },
                                        "success" : function(weixinUser) {
                          var userOpenId=weixinUser.openid;
                         //   alert(userOpenId);
                          console.log(userOpenId);

                        }   


在支付的时候写的代码

var wxApi = new navigator.WxApi("........");//你的微信公众号
                                         var tradeNo = hosNum;
                                        var notifyUrl = sessionStorage.getItem("ip") + "/jkwhWxCallBackAction.do";//location.origin + "/baas/weixin/weixin/notify";
                                        wxPay.pay({
                                                body :'支付',
                                                mchId : "1488416459",
                                                notifyUrl : notifyUrl,
                                                outTradeNo : tradeNo,
                                                totalFee : PayAmt*100,
                                                success : function(e) {
                                                        api.popTip('支付成功,正在跳转…',23, 5);
                                                        setTimeout(function() {  
                                                                justep.Shell.showPage("paysuccess",{tradeNo:tradeNo});
                                                        },  
                                                3000);


就报错了
Action[weixin/weixin/userinfo]执行失败,微信错误 errcode=40163, errmsg=code been used, hints: [ req_id: UliltA0596th31 ]</p><p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.</p><p><b>Exception</b></p><pre>javax.servlet.ServletException: 执行Action:weixin/weixin/userinfo失败,
回复 支持 反对

使用道具 举报

发表于 2017-12-14 11:06:11 | 显示全部楼层
笑看余生 发表于 2017-12-14 10:41
在首页登陆的时候写了如下代码,也确实获取到了用户信息

var self = this;

报错信息是请求  weixin/weixin/userinfo  这个action 的时候报错的!你调试跟下代码吧!
是什么时候又调用了  userinfo 的action 呢??
这个只调用一次!缓存本地就行了!  不用重复去调用的!需要自己看下代码了!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

26

主题

96

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
QQ
 楼主| 发表于 2017-12-14 12:30:53 | 显示全部楼层
liangyongfei 发表于 2017-12-14 11:06
报错信息是请求  weixin/weixin/userinfo  这个action 的时候报错的!你调试跟下代码吧!
是什么时候又调 ...

我们在点击支付按钮的时候就是执行了这句话,没有执行其他的代码会,不会你们那个baas里面自己执行了这句话呢

var wxApi = new navigator.WxApi("........");//你的微信公众号
                                         var tradeNo = hosNum;
                                        var notifyUrl = sessionStorage.getItem("ip") + "/jkwhWxCallBackAction.do";//location.origin + "/baas/weixin/weixin/notify";
                                        wxPay.pay({
                                                body :'支付',
                                                mchId : "1488416459",
                                                notifyUrl : notifyUrl,
                                                outTradeNo : tradeNo,
                                                totalFee : PayAmt*100,
                                                success : function(e) {
                                                        api.popTip('支付成功,正在跳转…',23, 5);
                                                        setTimeout(function() {  
                                                                justep.Shell.showPage("paysuccess",{tradeNo:tradeNo});
                                                        },  
                                                3000);


就报错了
Action[weixin/weixin/userinfo]执行失败,微信错误 errcode=40163, errmsg=code been used, hints: [ req_id: UliltA0596th31 ]</p><p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.</p><p><b>Exception</b></p><pre>javax.servlet.ServletException: 执行Action:weixin/weixin/userinfo失败,
回复 支持 反对

使用道具 举报

发表于 2017-12-14 13:17:49 | 显示全部楼层
笑看余生 发表于 2017-12-14 12:30
我们在点击支付按钮的时候就是执行了这句话,没有执行其他的代码会,不会你们那个baas里面自己执行了这句 ...

这样吧! 你先把外卖案例发布测试下!!相同环境试试,外卖案例支付的时候, 也会有这个错误吗??
或者你的代码 ,在调用userinfo的地方 alert   一下!
是否真的被再次调用了??

   justep.Shell.showPage("paysuccess", 后做了什么事??? 是否请求了userinfo  action ??  自己找一下是哪儿引起的吧!反正报错信息就是调用 userinfo 出错的!!而支付肯定不会请求这个的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

26

主题

96

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
QQ
 楼主| 发表于 2017-12-14 13:47:20 | 显示全部楼层
liangyongfei 发表于 2017-12-14 13:17
这样吧! 你先把外卖案例发布测试下!!相同环境试试,外卖案例支付的时候, 也会有这个错误吗??
或者 ...

我把wxPay里面的获取用户信息的字段给删除了,已经可以了
回复 支持 反对

使用道具 举报

20

主题

51

帖子

127

积分

初级会员

Rank: 2

积分
127
QQ
发表于 2019-5-29 00:29:38 | 显示全部楼层
笑看余生 发表于 2017-12-14 13:47
我把wxPay里面的获取用户信息的字段给删除了,已经可以了

同样的问题,你是删除了wxPay中的哪部分呢?求帮助
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-21 00:10 , Processed in 0.063299 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表