博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信JSApi支付~微信支付代理模式的实现(原创)
阅读量:6457 次
发布时间:2019-06-23

本文共 2166 字,大约阅读时间需要 7 分钟。

起因(大叔原创)

对于微信支付来说,你的发起者需要配置对应的域名来获取code(获取用户信息接口),而这意味着,你的多个项目(域名不同)不能同时使用一个公众号,这是一件很操蛋的事,对于我们开发人员来说,当然不能接受,我们需要一种代理模式,代我们实现多个项目使用一个公众号(一个支付的域名),这是必须的,说做就做。(支付发起者可以多个域名,最多三个,就是我们说的权限目录那块)

原理

开始-》

第三方网站重定向在代理服务器-》

代理服务器跳到微信服务器拿code-》

返回 code到代理服务器-》

代理服务器再发跳到微信服务器拿 openid和token-》

返回openid和token到代理服务器-》

当openid不为空时跳回第三方网站服务器-》

由第三方服务的支付完成最后的付款过程-》

结果

思维图像

实现

#region 代理模式        ///         /// 微信支付        /// 从代理服务器获取openID        /// 注意:代理服务器与本服务器需要有预定,双方要告诉对应的URL地址,用来进行二次跳转        ///         /// 
public ActionResult Weixin() { string openId = Request.QueryString["openId"]; if (string.IsNullOrWhiteSpace(openId)) { //第一次加载页面,跳转到代理服务器获openid Logger.LoggerFactory.Instance.Logger_Info("openid为空"); Response.Redirect("http://m.xxx.cn/order/GetOpenId"); } else { //由代理服务器跳回来后,得到本用户的openId Logger.LoggerFactory.Instance.Logger_Info("从m158拿到openid:" + openId); ViewBag.openId = openId; } return View(); } /// /// 微信支付的代理服务 /// ///
public void WeixinProxy() { string openId = JsApiImplement.GetOpenId();//获取当前openId string bussinessUrl = "";//业务网站支付地址 if (!string.IsNullOrWhiteSpace(openId)) Redirect(bussinessUrl + "?openId=" + openId); } /// /// 获取支付JSON串 /// /// /// /// ///
public string GetPayJson(string orderId, int money, string openId) { try { Logger.LoggerFactory.Instance.Logger_Info("发送订单号=" + orderId + ",openID=" + openId); //JsApiImplement.GetOpenId();加到主页面上 return JsApiImplement.Send(money, orderId, openId); } catch (Exception ex) { Logger.LoggerFactory.Instance.Logger_Error(ex); return "出错了"; } }#endregion

在测试过程中出现过一些问题,然后通过日志分析解决了,感觉在oauth权限过程中,页面重定向成为了唯一的方式,以后这种方式我们应该在自己的项目中多多使用!

感谢这个坑很多的微信!

没有你的坑,我们也不会学到这么多知识!

转载地址:http://cfizo.baihongyu.com/

你可能感兴趣的文章
MSSQL数据库跨表和跨数据库查询方法简(转)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
SSM——查询_分页
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
如何让LinearLayout也有类似Button的点击效果?
查看>>
JAVA读取文件方法大全
查看>>
寻找最小的k个数
查看>>
CSS3中的动画效果记录
查看>>
CI框架整合微信公共平台接口
查看>>
XCode快捷键
查看>>
request.getScheme()的使用方法
查看>>
Kaldi单音素模型 训练部分
查看>>
Android快速开发常用知识点系列目录
查看>>
Java ActiveMQ队列模式案例
查看>>
EJB2的配置
查看>>
最容易理解的对卷积(convolution)的解释
查看>>
《机器学习实战》知识点笔记目录
查看>>
Linux操作系统实时性分析
查看>>