集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现
/**
* 因为微信总是很多个商户号很多和appid。很多个密钥文件,所以全部改成手动传值的方式,就可以支持多商户调用
*
* @param appId 商户的appid
* @param mchId 商户的商户号
* @param key 商户的支付用的密钥
* @param certPath 商户的退款用的退款文件地址,非必传,没有就传null,具体看开发文档是否需退款文件
* @throws Exception
*/ 调用示例测试代码。扫码支付返回的是一个base64格式的二维码。需要拼接前缀的(有逗号) : data:image/jpeg;base64, public static void main(String[] args) throws Exception {
WXPayEntrance wxPayEntrance = new WXPayEntrance("wxab8acb865bb1637e", "11473623", "2ab9071b06b9f739b950ddb41db2690d", null);
WXPayVO wxPayVO = new WXPayVO();
wxPayVO.setBody("1231231666623");
wxPayVO.setTotalFee("1");
wxPayVO.setNotifyUrl("https://********/api/wxpayreturn");
wxPayVO.setTradeType("NATIVE");
wxPayVO.setOutTradeNo("ty190523151415047046");
wxPayVO.setUid(123123123);
wxPayVO.setSpbillCreateIp("192.168.17.214");
Map<String, String> map = wxPayEntrance.doUnifiedOrder(wxPayVO);
System.out.println(map); // PayRefundVo payRefundVo = new PayRefundVo();
// payRefundVo.setOutRefundNo("A190523155119103");
// payRefundVo.setOutTradeNo("ty190523155047046");
// payRefundVo.setRefundDesc("退款");
// payRefundVo.setRefundFee("10");
// payRefundVo.setUid(123123123);
// payRefundVo.setRefundFeeType("CNY");
// payRefundVo.setTotalFee("120");
// Map<String, String> map = wxPayEntrance.doRefund(payRefundVo);
// System.out.println(map);
}
异步回调代码如下: package com.huis.portal.controller; import com.huis.portal.weixinpay.WXPayUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap; @RestController
@Api(description = "支付模块模块")
@CrossOrigin(origins = "*", maxAge = 3600)
@Transactional(rollbackFor = Exception.class)
public class PayRestController { @ApiOperation(value = "微信回调接口", notes = "微信回调接口")
@RequestMapping(value = "/api/wxpayreturn", method = RequestMethod.POST)
public String WeixinParentNotifyPage(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 返回给微信的处理结果
String result = null;
String inputLine;
String notityXml = "";
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Access-Control-Allow-Origin", "*");
// 微信给返回的东西
try {
while ((inputLine = request.getReader().readLine()) != null) {
notityXml += inputLine;
}
request.getReader().close();
} catch (Exception e) {
e.printStackTrace();
result = setXml("fail", "xml获取失败");
return result;
}
if (StringUtils.isEmpty(notityXml)) {
result = setXml("fail", "xml为空");
return result;
}
Map<String, String> map = WXPayUtil.xmlToMap(notityXml);
String out_trade_no = (String) map.get("out_trade_no");// 获取商户订单号
String result_code = (String) map.get("result_code");// 业务结果
String total_fee = (String) map.get("total_fee");// 获取订单金额
String appid = (String) map.get("appid");// 获取订单金额
if (map.get("result_code").equals("SUCCESS")) {
//TODO result = setXml("SUCCESS", "OK");
return result;
}else {
result = setXml("fail", "xml为空");
return result;
} }
// 通过xml 发给微信消息
public static String setXml(String return_code, String return_msg) {
SortedMap<String, String> parameters = new TreeMap<String, String>();
parameters.put("return_code", return_code);
parameters.put("return_msg", return_msg);
return "<xml><return_code><![CDATA[" + return_code + "]]>" + "</return_code><return_msg><![CDATA[" + return_msg
+ "]]></return_msg></xml>";
} }
密钥文件通过maven打包的过程中会被maven编译,修改文件内容,需要在pom文件中加入忽略插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
微信支付代码下载地址:链接:https://pan.baidu.com/s/1kZs5hxQuzxmRR50N-DOKSg 密码:u4rj
集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现的更多相关文章
- 微信公众号H5支付遇到的那些坑
简史 官方文档说的很清楚,商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 当然,最近微信支付平台也加入了纯H5支付,也就是说用户可以在微信以外的 ...
- Authing新功能——小程序扫码登录
近期,Authing 发布了新功能--小程序扫码登录. 小程序扫码登录指使用Authing小程序身份管家在网页端或其它客户端执行微信登录,目前的SDK仅支持客户端JavaScript.其它语言若想使用 ...
- 【小程序】微信小程序打开其他小程序(打开同一主体公众号下关联的另一个小程序)
微信小程序打开其他小程序(打开同一公众号下关联的另一个小程序) 注:只有同一(主体)公众号下的关联的小程序之间才可相互跳转 wx.navigateToMiniProgram(OBJECT) wx.n ...
- JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息
一,首先说明下这个微信的openid 为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号.移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开 ...
- 微信小程序~扫码
为了让用户减少输入,我们可以把复杂的信息编码成一个二维码,利用宿主环境wx.scanCode这个API调起微信扫一扫,用户扫码之后,wx.scanCode的success回调会收到这个二维码所对应的字 ...
- 微信小程序扫码解析小程序码
通过微信扫小程序码,跳转到应用小程序内, 如何解析小程序码的参数呢? 一般小程序码会跳转到设置的页面,如首页, 可以直接跳转到小程序首页,然后解析小程序携带的参数,再打开某个页面. (小程序码的路径要 ...
- 微信小程序——扫码后提示“打开失败缺少ID”
解决步骤: 进入通讯录tab->点击右上角添加朋友->搜索框输入:recover,拉到最底下选择小程序进行修复操作 参考:https://developers.weixin.qq.com/ ...
- uniapp 微信小程序扫码处理
1.view 代码 <view class="v-main-scan"> <uni-icons @click="scanCode" clas ...
- 微信公众号H5支付
微信支付说明1.统一下单接口 统一支付接口: url: https://api.mch.weixin.qq.com/pay/unifiedorder 目的:通过此接口来创建预支付订单,获取订单支付需要 ...
- 小程序的openid和公众号的openid是否一致
早期的产品只用了公众号,没有注册开放平台(没有unionid).然后现在需要上线小程序,这种情况下,企业是同一个企业的,但是公众号的openid和小程序的openid是否一致呢? 我来回答你这个问题: ...
随机推荐
- uoj #242【UR #16】破坏蛋糕
uoj 考虑把那最后一条直线拎出来,并且旋转到和\(y\)轴平行(其他直线同时一起旋转),然后它和其他直线相交形成\(n+1\)个区间,现在要知道这些区间是否处在一个面积有限的区域 可以发现一段在有限 ...
- CSS3 @keyframes 实现匀速旋转魔方(搬运工)
原博文 * https://www.cnblogs.com/shihao905/p/6208324.html * html <div id="wrap"> <di ...
- vue+hbuilder 打包成移动app
查看了很多网上写的改来改去都在手机上运行不起来,运行起来又是白屏:最后放弃,自己结合文档搞吧! 1. 项目目录下的config文件夹里的index.js文件中,将build对象下的assetsPubl ...
- host - 使用域名服务器查询主机名字
SYNOPSIS (总览) host [-l ] [-v ] [-w ] [-r ] [-d ] [-t querytype ] [-a ] host [server ] DESCRIPTION (描 ...
- framebuffer测试程序
/* framebuffer简单测试程序 网上转载 很多次 的程序 :-) */ #include <stdio.h> #include <stdlib.h> #include ...
- BufferedReader和PrintWriter读写中文的问题
最近用BufferedReader读一个文本文件,然后再将读出的内容用PrintWriter写入到另外一个新的文件中. 之前一直没有发现这个问题,就是如果文本内容中有中文,在读出的内容和写入的内容都会 ...
- json与string与map的理解
json是一种特殊格式的string字符串,也就是json也是string类型,只是这种string是有格式的,那么他的格式就是类似map的格式[key:value] 举例子: Map map = r ...
- python 控制流(二)
常用控制流 条件语句 循环语句 一.条件语句 if 条件表达式: #条件表达式--->比较运算符--->布尔值 满足条件表达式执行的代码块 #当布尔值为 True时执行此句 elif 条件 ...
- Jmeter插件介绍
JMeterPlugin可以把JMeter生成的jtl文件做出很好的统计图,同时还支持机器的cpu.memory.swap.disk io和network的监控. 插件可分四类: 用于服务器性能监视的 ...
- null 的应用
它是 Oracle 中非常特殊的一种类型.它表示不确定,表示没有值.并且它能转化成所有的类型. 向数据库中插入空字符串时,oracle 会把它自动转化为 null 类型.所以,在查询空字符的时候: s ...