微信支付

开发流程:

下单成功(预扣库存 wq)之后,把订单号返回前端,前端发送支付请求到后端,支付接口把订单号,应付金额传给微信支付系统,微信支付系统返回支付链接,我们把支付连接返回前端,前端通过一个插件展示成二维码,用户扫二维码支付,如果支付成功,微信支付系统会异步回调我们写的接口,我们可以主动查询订单的支付情况,如果支付成功,修改订单状态为已支付,同时插入流水,还要异步通知(websocket)客户端,前端页面跳转支付成功页面

1.下单接口,2.支付接口,3.支付成功给微信回调接口

统一下单接口调用

在线微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html

1.导入依赖

第一步:pom依赖

<dependency><groupId>com.github.tedzhdz</groupId><artifactId>wxpay-sdk</artifactId><version>3.0.10</version>
</dependency>
<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency>

如果时springboot

<dependency><groupId>com.github.tedzhdz</groupId><artifactId>wxpay-sdk</artifactId><version>3.0.10</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId></exclusion></exclusions>
</dependency>

2.微信支付配置类

package com.fzy.wx;import com.github.wxpay.sdk.IWXPayDomain;
import com.github.wxpay.sdk.WXPayConfig;import java.io.InputStream;
//微信支付配置类
public class WXConfig extends WXPayConfig {public String getAppID() {return "wx632c8f211f8122c6";}public String getMchID() {return "1497984412";}public String getKey() {return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC";}public InputStream getCertStream() {return null;}public IWXPayDomain getWXPayDomain() {return new IWXPayDomain() {public void report(String s, long l, Exception e) {}public DomainInfo getDomain(WXPayConfig wxPayConfig) {return new DomainInfo("api.mch.weixin.qq.com",true);}};}
}

3.测试统一下单接口

步骤:
1:构建配置对象
2:封装请求参数
3:map转xml
4:发送请求WXPayRequest request = new WXPayRequest(config);
5:响应结果转map集合
6:获取支付地址
package com.fzy.wx;import com.github.wxpay.sdk.WXPayRequest;
import com.github.wxpay.sdk.WXPayUtil;import java.util.HashMap;
import java.util.Map;
import java.util.UUID;public class WxDemo {//统一下单接口public static void main(String[] args) throws Exception{WXConfig wxConfig = new WXConfig();//封装请求参数Map requestParamsMap = new HashMap();requestParamsMap.put("appid",wxConfig.getAppID());requestParamsMap.put("mch_id",wxConfig.getMchID());requestParamsMap.put("nonce_str", WXPayUtil.generateNonceStr());requestParamsMap.put("body","用户下单支付");requestParamsMap.put("out_trade_no", "1000000011");requestParamsMap.put("total_fee",88+"");requestParamsMap.put("spbill_create_ip","127.0.0.1");requestParamsMap.put("notify_url","http://www.baidu.com");requestParamsMap.put("trade_type","NATIVE ");//map转成xmlString requestParamsXML = WXPayUtil.generateSignedXml(requestParamsMap, wxConfig.getKey());//发送请求(httpclient)WXPayRequest wxPayRequest  = new WXPayRequest(wxConfig);String responseXML = wxPayRequest.requestWithoutCert("/pay/unifiedorder", UUID.randomUUID().toString(), requestParamsXML, false);System.out.println("responseXML = " + responseXML);//解析xml     xml => mapMap<String,String> responseMap = WXPayUtil.xmlToMap(responseXML);String code_url = responseMap.get("code_url");System.out.println("code_url = " + code_url);}
}

支付接口

@Override
public ResultVO pay(String orderSn, String userid){//1.查询订单OmsOrder orderBySn = orderMapper.findOrderBySn(orderSn,userid);if (orderBySn == null) {return new ResuLtVO( false,"订单不存在");}//判断订单支付状态if(!"0".equals(orderBySn.getStatus()+"")){return new ResuLtVO( false, "订单状态必须时待付款");}//计算订单的支付金额BigDecimal payAmount = orderBySn.getPayAmount();BigDecimal payAmountFen = payAmount.multiply(new BigDecimal( "100"));//调用微信的统一下单接口try {String codeUrl = wxpay(orderSn, payAmountFen.toString(),"http://www.baidu.com");return new ResuLtVO( true, "下单成功" , codeUrl);} catch (Exception e) {e.printStackTrace();return new ResuLtVO( false, "下单失败");
}//微信的统一下单接口
@Override
public String wxpay(String orderSn, String fee, String notifyUrl){WXConfig wxConfig = new WXConfig();//封装请求参数Map requestParamsMap = new HashMap();requestParamsMap.put("appid",wxConfig.getAppID());requestParamsMap.put("mch_id",wxConfig.getMchID());requestParamsMap.put("nonce_str", WXPayUtil.generateNonceStr());requestParamsMap.put("body","用户下单支付");requestParamsMap.put("out_trade_no", orderSn);requestParamsMap.put("total_fee",fee+"");requestParamsMap.put("spbill_create_ip","127.0.0.1");requestParamsMap.put("notify_url",notifyUrl);requestParamsMap.put("trade_type","NATIVE ");//map转成xmlString requestParamsXML = WXPayUtil.generateSignedXml(requestParamsMap, wxConfig.getKey());//发送请求(httpclient)WXPayRequest wxPayRequest  = new WXPayRequest(wxConfig);String responseXML = wxPayRequest.requestWithoutCert("/pay/unifiedorder", UUID.randomUUID().toString(), requestParamsXML, false);System.out.println("responseXML = " + responseXML);//解析xml     xml => mapMap<String,String> responseMap = WXPayUtil.xmlToMap(responseXML);String code_url = responseMap.get("code_url");System.out.println("code_url = " + code_url);return code_url;}

【微信支付接口调用】相关推荐

  1. 微信支付接口调用问题(android正常,iphone调不起)

    碰到的问题 :根据微信提供的示例代码(ASP.NET),配置好一切后, 用android微信客户端返回,调起支付接口一切正常, 但使用iphone微信客户端时,点击"立即支付"按钮 ...

  2. 微信小程序PHP 微信支付接口调用

    小程序端  js数据处理 根据官方文档配置好参数,传入服务器. /*** 微信支付接口*/wxPaymoney:function (out_trade_no, true_money){ //out_t ...

  3. 微信支付接口调用之二维码失效时间的设置

    今天解决了测试提交上来的一个bug,说是公司网站调用的二维码接口没有做超时失效处理,这种情况容易导致用户账号登出后,该二维码还是有效的,当用户扫描支付时还是能够支付成功,但是微信支付成功后调用我们配置 ...

  4. 微信支付接口调用记录

    1. totalmoney 必须是不带小数的,默认单位是分  ,如 你付款0.01元,传到后端要*100单位变为分,然后 强转整数 2. 支付异步回调,做出判断,如果订单已经处理过,就不让执行业务代码 ...

  5. php h5微信公众号支付接口,微信公众号H5支付接口调用方法

    本文实例为大家分享了 微信内h5调用支付接口的具体代码,供大家参考,具体内容如下 官方文档 微信公众号h5接口调用 // 判断微信版本是否在5.0以上 // window.navigator.user ...

  6. 调用微信支付接口总结

        项目里面用到了微信支付的功能,照着文档学习了一下,这里做个总结来记录.项目用到的是anglusJS来做前端开发,我这边简化了,用的ajax进行异步的调用,然后业务也直接写在了控制层(不过不应该 ...

  7. php 调用微信支付的时间戳,前端调用微信支付接口

    支付按钮的点击事件$(´.Save_Patient_Msg´).click(function(){ $(´.Save_Patient_Msg´).off(´click´); var hrdfId = ...

  8. 微信支付接口,提示:调用支付jsapi缺少参数: $key0$

    下面是 官方给的 帮助文档. 支付返回签名错误 注意签名参数的大小写,支付密钥key要到商户平台设置,设置的规则是32位数字与字母大小写的组合.以下链接为签名过程. (https://pay.weix ...

  9. java后台提供ios微信支付接口

    提供微信支付接口,需要先在微信开放平台(https://open.weixin.qq.com/)申请账号,进行开发者资格认证通过后创建应用. 创建成功后会有对应应用的AppID和AppSecret这个 ...

  10. 关于个人如何接入微信支付接口,适用于h5,小程序等应用场景

    关于个人如何接入微信支付接口,适用于h5,小程序等应用场景, 众所周知,要想使用微信支付实现公众号.商城.小程序.h5网页等产品或者服务购买,需要申请微信小程序或者服务号,并且要企业认证,还要提交微信 ...

最新文章

  1. VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
  2. 前端不规则图像点击_css实现不规则图形的阴影(如对话框)
  3. 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。
  4. Android SDK 目录说明
  5. 转:Kafka事务使用和编程示例/实例
  6. Spark性能优化指南——高级篇
  7. HTML+CSS+JS实现 ❤️slicebox酷炫3d图片轮播切换❤️
  8. android activity启动模式_从0系统学Android--2.5Activity启动模式
  9. html怎么实现单个li效果,基于DIV+ul+li实现的表格(多示例)
  10. js define函数_不夸张,这真的是前端圈宝藏书!360前端工程师Vue.js源码解析
  11. python 随机数抽奖系统_python实现的简单抽奖系统实例
  12. range与xrange的区别
  13. 传奇进去选择服务器位置偏移,传奇聊天框偏移怎么解决,GOM GEE聊天框错位的解决方法...
  14. 【转】从事IT行业的应该如何学习最高效的休息方式
  15. 修改棋牌服务器,关于棋牌服务器的一些程序搭建和数据应用步骤
  16. 投影仪与计算机连接方式,电脑与接投影仪、显示器的连接和设置方法
  17. Groovy的规则脚本引擎实战
  18. 运营地方旅游网站是否还有生存空间?
  19. [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP
  20. UCOS II移植到STM32F103开发板

热门文章

  1. 09-03 NOIP模拟测试36
  2. webflux之reactor-Publisher
  3. Java ist reverse_GKCTF 2020 Reverse Writeup
  4. 计算机硬盘没内存怎么办,电脑内存不够用怎么办
  5. 如何修改request的parameter的几种方式
  6. 2012年第19周限时免费应用点评
  7. Region Proposal by Guided Anchoring 笔记
  8. 【第一组】第十六次冲刺例会纪要
  9. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)
  10. mysql 语法大全