申请微信支付在这里:https://blog.csdn.net/dmw412724/article/details/82735906

微信支付后台搭建(阅读本文的基础):https://blog.csdn.net/dmw412724/article/details/90053811

一。后台统一下单

private static Map<String, String> testOrder() throws Exception{/*** 统一下单所需数据*/Map<String, String> reqData = new HashMap<>();reqData.put("out_trade_no", "101");reqData.put("total_fee", "101");reqData.put("notify_url", "http://www.baidu.com");reqData.put("body", "请支付");reqData.put("spbill_create_ip", "192.168.0.100");reqData.put("openid", "oxaaaaaaaa");reqData.put("trade_type", "JSAPI");/*** 发送请求*/WXPayConfigImpl config = new WXPayConfigImpl();//沙箱WXPay pay = new WXPay(config);Map<String, String> map = pay.unifiedOrder(reqData);System.out.println(map);/*** 判断http成功且结果成功*/if ("SUCCESS".equals(map.get("return_code")) && "SUCCESS".equals(map.get("result_code"))){Map<String, String> data = new HashMap<>();//取出下面的值data.put("appId", map.get("appid"));data.put("timeStamp", Long.toString(WXPayUtil.getCurrentTimestamp()));data.put("package", "prepay_id="+map.get("prepay_id"));//取出里面的预订单iddata.put("nonceStr", WXPayUtil.generateNonceStr());data.put("signType", WXPayConstants.MD5);//重新加密并塞到data里data.put("paySign", WXPayUtil.generateSignature(data, config.getKey()));return data;//把这个返回到前台}return null;}

最终拿到数据应该得到了这几个东西:

appId,

timeStamp,

nonceStr,

package,

signType,

paySign

然后把这个map传递到前台就行了.因为这六个正好是前台所需要的

二. 前台

两种写法.一种是使用微信jssdk.一种是直接使用微信内置浏览器对象.它俩什么关系?应该是jssdk里引用了微信内置浏览器对象吧.

使用微信内置浏览器对象就意味着必须在微信里才能使用.这并不是在其他应用里唤醒微信并打开微信支付 .

1.jssdk写法.

这个是在使用jssdk需要进行初始化验签保证安全.这个大家都清楚.如果不懂,那么去看另外一种方法吧.

wx.config({//debug: true,appId: "", timestamp: "", nonceStr: "", signature: "",jsApiList: ["chooseWXPay"] });  

你还要引入一个js.微信的js

 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

验完后调用这个就行了.

 wx.chooseWXPay({appId: data.body.appId,timestamp: data.body.timeStamp,nonceStr: data.body.nonceStr,package: data.body.package, signType: data.body.signType, paySign: data.body.paySign,                                success: function (res) {alert("成功"); },fail: function(res) {alert('fail--'+JSON.stringify(res))},complete: function(res) {alert('complete--'+JSON.stringify(res))}})  

这个里面.data.body.xxx就是后台返回的值

不管怎样,都会走complete方法.

如果用户确认支付了,会走success方法.

如果调用api错误了.那么会走fail方法.

2.微信内置对象写法

WeixinJSBridge.invoke('getBrandWCPayRequest',{"appId":data.body.appId,     //公众号名称,由商户传入     "timeStamp":data.body.timeStamp,         //时间戳,自1970年以来的秒数     "nonceStr":data.body.nonceStr, //随机串     "package":data.body.package,     "signType":data.body.signType,         //微信签名方式:     "paySign":data.body.paySign //微信签名 },function(res){if(res.err_msg == "get_brand_wcpay_request:ok" ){// 使用以上方式判断前端返回,微信团队郑重提示://res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。}}
);   

这个里面.data.body.xxx就是上面那1.6里说的那个map里面的值.

3.一些返回fail的坑?

1.对于安卓来说,不管什么都是fail.所以请使用ios来调试,ios会告诉你到底怎么回事.

2.微信支付授权目录要配置正确(我目前是没有这个问题的).timeStamp是要大写的,但如果你用了我的工具类,也是不会出现这样的问题的..

3.客户端ip要真实.

4.如果使用jssdk写法.请引入jweixin-1.0.0.js

5.如果ios调试没有问题,而安卓有问题(或部分机型有问题?),那么你应该使用的是jssdk,你引入的那个jweixin-1.0.0.js放在了下面,应该把这条js放到最上面来引用.

三.回调

public String notifyUrlByWx(HttpServletRequest request) throws Exception {String notifyData = WebUtils.getPostBody(request);//获取输入流xml字符串Map<String, String> notifyMap = WXPayUtil.xmlToMap(notifyData); // 转换成mapif (WXPayUtil.isSignatureValid(notifyMap, WxPayConfig.KEY)) {// 签名正确// 进行处理。// 注意特殊情况:订单已经退款,但收到了支付结果成功的通知,不应把商户侧订单状态从退款改成支付成功            String resultCode = notifyMap.get("result_code");if (resultCode.equals("SUCCESS")){//处理业务逻辑//返回return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";}else{//如果支付失败}} else {// 签名错误,如果数据里没有sign字段,也认为是签名错误}return "error";}

微信开发------------公众号支付统一下单整个流程相关推荐

  1. php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...

    手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...

  2. 微信jsapi支付获取code_微信JSAPI公众号支付在部分机型上出现appid参数错误的解决办法 - YangJunwei...

    都说微信支付的坑比较多,老杨感觉还行,就是开始周期和调试过程比较费时费力-_-! 今儿在调试一个基于微信JSAPI公众号的支付项目时发现,部分机型(比如iphone7/vivo-x6d)中微信支付获取 ...

  3. 公众号php支付接口开发,公众号支付接口的开发

    这次给大家带来公众号支付接口的开发,公众号支付接口开发的注意事项有哪些,下面就是实战案例,一起来看一下. 公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能.做这个功能首先要明确的 ...

  4. 微信跨公众号支付(appid 与 openid 不匹配)-koa

    实现不同主体公众号的跨公众号支付其实原理很简单,就下面几点: 1.用一个公众号的appid来进行收款 2.这个公众号的appid需要和商户号绑定 3.用这个appid来获取用户的openid 进过上面 ...

  5. 微信跨公众号支付(appid 与 openid 不匹配)

    实现不同主体公众号的跨公众号支付其实原理很简单,就下面几点: 1.用一个公众号的appid来进行收款 2.这个公众号的appid需要和商户号绑定 3.用这个appid来获取用户的openid 进过上面 ...

  6. 微信开发公众号页面配置JS-SDK调用微信接口

    一:前期准备, 1,首先你需要一台服务器,:阿里云或者腾讯云啥的,最便宜的可以选择类似阿里云这种轻量级服务器,和域名配置好A记录. 2,需要在服务器打架node环境:可以找客服帮忙基本配置环境搭好. ...

  7. 微信开发 - 公众号授权登录方案(含跳转关注公众号)

    公众号授权登录代码(含跳转关注公众号) 注意: 跳转微信公众号页: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5 ...

  8. 公众号php视频教程,微信开发公众号平台视频教程

    微信公众平台,给个人.企业和组织提供业务服务与用户管理能力的全新服务平台.微信公众平台主要有实时交流.消息发送和素材管理.用户可以对公众账户的粉丝分组管理.实时交流,同时也可以使用高级功能-编辑模式和 ...

  9. 微信H5公众号支付问题-(get_brand_wcpay_request:fail)2017年10月

    微信支付文档确实做的有很多不足的地方,基于以上情况本人对于微信支付遇到get_brand_wcpay_request:fail做出如下解决方案: function jsApiCall() {Weixi ...

最新文章

  1. c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?
  2. jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同怎么办
  3. C++ | 蓝桥杯2021年第十二届卡片问题(源代码:C语言/C++/Python)
  4. GDCM:gdcm::Validate的测试程序
  5. Android之去掉RecycleView和NestedScrollView边缘效果
  6. C语言:---gdb多线程调试
  7. 一切事物皆对象_基础篇
  8. MySQL Control Flow Functions(控制流)
  9. 话里话外:实践企业内控,需与流程沟通(二)
  10. 稀疏矩阵的加,减,乘,转置
  11. python爬虫框架scrapy实例详解
  12. 一款好用的国产软件源代码缺陷分析平台 — CodeSense
  13. 南京国际动漫游戏博览会 一日游(10-5)
  14. Praat脚本提取时长及共振峰并绘制声学元音图
  15. 不一样的xss payload
  16. android calendar 24小时制,Android 使用SimpleDateFormat以及Calendar转换时间为12小时制和24小时制时间格式...
  17. 云计算的定义是什么?
  18. 005永磁同步电机的数学模型:写了很久,非常适合零基础的同学学习参考
  19. [词语辨析] Try, Attempt, Endeavour “尝试” 的用法
  20. JAVA计算机毕业设计二手手机回收平台系统Mybatis+源码+数据库+lw文档+系统+调试部署

热门文章

  1. 【医学成像】超声成像中的分辨率
  2. 微信公众号服务器配置但没有回调,微信公众号 “服务器配置” 踩坑记
  3. 2020年AJ超级配乐库音频配乐资源2020.VOL-09更新100首Audio Jungle音乐素材包
  4. 笔记整理之 寒门难出贵子5 宝宝在魔都陨落
  5. 怎么使得tomcat支持put请求
  6. u盘怎么样在w ndows7上使用,用U盘给MAC BOOK AIR安装windows7系统
  7. 下载自媒体内容素材,帮你快速创造内容
  8. 山东计算机单招考哪些科目,单招考什么内容 单招一般考什么科目
  9. EasyUi(完整版)
  10. HarmoneyOS实战——原子化服务初体验