.NET调用微信支付一闪而过的解决方案

       本人用MVC开发微信支付,调用的是的微信的JSAPI接口,今天总是出现调用支付的时候,支付界面(三个点那个)一闪而过,经过一点点的实验,终于成功(100%可以调出来微信支付界面)。

       如果在调用微信支付前,你的各种微信支付的KEY填写正确,公众号的支付路径配置没问题,JS安全域名已经设置,但在调用支付的时候支付接口一闪而过。那么请按照以下步骤进行检查。

1、在执行支付的页面(如WxPay是支付页面用来获取授权code、Openid、Access_Token等 ,Wxpaying支付操作,负责返回调用微信支付接口的参数信息)的加载中(如MVC中对应的Controller中的public ActionResult WxPay())不要进行什么Openid的判断,直接return View(),获取code的操作在前台用JS调用后台方法来负责实现。


2、前台在JQuery获取code的调用后台的方法中,每次都要重新生成一个获取code的回调链接,不要用Session等来保存这个Url(因为如果保存了,并且在这个页面调用的时候判断是否存在,就会可能造成这个Url的code过期,或者传递过来的如订单号这样的参数不会更新),这里需要注意的是把返回的调用这个方法名的路径名换成步骤1的可以返回页面的路径,要不然微信回调后会404,除非你给这个方法也写了个View


3、获取Code后进行的获取当前支付人的Openid和Access_Token的调用后台的操作,记得每次jsApiPay.GetOpenidAndAccessTokenFromCode(strCode)来获取,因为步骤2的原因,这个Code每次都不同。当然如果确定Openid和Access_Token对同一用户不会变的情况下,可以保存,这个我没仔细看微信的文档,我选择的是每次都获取新的。


4、在前台调用微信支付前(onBridgeReady)给个中断(如alert一个信息),要不然还是一闪而过,我选择的是用Jquery加载一个Loading的图标2秒,然后在调用微信支付接口,自从加了这个中断,就100%可以调用微信支付界面了(除非没用步骤2的时候订单号不存在或重复)。至于怎么不加中断就可以100%调用,我还没弄出来,我想到的原因是调用支付接口的时候,后台还有通讯没有完成,导致了参数没有返回过来,从而导致支付失败(或者又跳转了获取Code或者授权信息的Url),这个还要在调试才知道。


匆匆写了这些,如果您有好的解决方法,还望分享。尤其是关于第4个中断(延时)才可以出现支付界面的问题。

谢谢啦~~


发布了85 篇原创文章 · 获赞 31 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/5653325/article/details/54318767