【微信支付接口调用】
微信支付
开发流程:
下单成功(预扣库存 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;}
【微信支付接口调用】相关推荐
- 微信支付接口调用问题(android正常,iphone调不起)
碰到的问题 :根据微信提供的示例代码(ASP.NET),配置好一切后, 用android微信客户端返回,调起支付接口一切正常, 但使用iphone微信客户端时,点击"立即支付"按钮 ...
- 微信小程序PHP 微信支付接口调用
小程序端 js数据处理 根据官方文档配置好参数,传入服务器. /*** 微信支付接口*/wxPaymoney:function (out_trade_no, true_money){ //out_t ...
- 微信支付接口调用之二维码失效时间的设置
今天解决了测试提交上来的一个bug,说是公司网站调用的二维码接口没有做超时失效处理,这种情况容易导致用户账号登出后,该二维码还是有效的,当用户扫描支付时还是能够支付成功,但是微信支付成功后调用我们配置 ...
- 微信支付接口调用记录
1. totalmoney 必须是不带小数的,默认单位是分 ,如 你付款0.01元,传到后端要*100单位变为分,然后 强转整数 2. 支付异步回调,做出判断,如果订单已经处理过,就不让执行业务代码 ...
- php h5微信公众号支付接口,微信公众号H5支付接口调用方法
本文实例为大家分享了 微信内h5调用支付接口的具体代码,供大家参考,具体内容如下 官方文档 微信公众号h5接口调用 // 判断微信版本是否在5.0以上 // window.navigator.user ...
- 调用微信支付接口总结
项目里面用到了微信支付的功能,照着文档学习了一下,这里做个总结来记录.项目用到的是anglusJS来做前端开发,我这边简化了,用的ajax进行异步的调用,然后业务也直接写在了控制层(不过不应该 ...
- php 调用微信支付的时间戳,前端调用微信支付接口
支付按钮的点击事件$(´.Save_Patient_Msg´).click(function(){ $(´.Save_Patient_Msg´).off(´click´); var hrdfId = ...
- 微信支付接口,提示:调用支付jsapi缺少参数: $key0$
下面是 官方给的 帮助文档. 支付返回签名错误 注意签名参数的大小写,支付密钥key要到商户平台设置,设置的规则是32位数字与字母大小写的组合.以下链接为签名过程. (https://pay.weix ...
- java后台提供ios微信支付接口
提供微信支付接口,需要先在微信开放平台(https://open.weixin.qq.com/)申请账号,进行开发者资格认证通过后创建应用. 创建成功后会有对应应用的AppID和AppSecret这个 ...
- 关于个人如何接入微信支付接口,适用于h5,小程序等应用场景
关于个人如何接入微信支付接口,适用于h5,小程序等应用场景, 众所周知,要想使用微信支付实现公众号.商城.小程序.h5网页等产品或者服务购买,需要申请微信小程序或者服务号,并且要企业认证,还要提交微信 ...
最新文章
- VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
- 前端不规则图像点击_css实现不规则图形的阴影(如对话框)
- 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。
- Android SDK 目录说明
- 转:Kafka事务使用和编程示例/实例
- Spark性能优化指南——高级篇
- HTML+CSS+JS实现 ❤️slicebox酷炫3d图片轮播切换❤️
- android activity启动模式_从0系统学Android--2.5Activity启动模式
- html怎么实现单个li效果,基于DIV+ul+li实现的表格(多示例)
- js define函数_不夸张,这真的是前端圈宝藏书!360前端工程师Vue.js源码解析
- python 随机数抽奖系统_python实现的简单抽奖系统实例
- range与xrange的区别
- 传奇进去选择服务器位置偏移,传奇聊天框偏移怎么解决,GOM GEE聊天框错位的解决方法...
- 【转】从事IT行业的应该如何学习最高效的休息方式
- 修改棋牌服务器,关于棋牌服务器的一些程序搭建和数据应用步骤
- 投影仪与计算机连接方式,电脑与接投影仪、显示器的连接和设置方法
- Groovy的规则脚本引擎实战
- 运营地方旅游网站是否还有生存空间?
- [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP
- UCOS II移植到STM32F103开发板