集成微信支付的代码。兼容小程序,扫码,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是否一致呢? 我来回答你这个问题: ...
随机推荐
- python3:tuple元组
https://www.runoob.com/python3/python3-tuple.html 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. Py ...
- 程序员称为高手的10条心得(摘自http://www.jizhuomi.com/software/394.html)
在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer).经 ...
- SQLite 参数化查询
SQLite参数化查询 首先给出两个参考博客: Sqlite DB sqlite3使用简介 贴出一段自己用的代码: #include <stdio.h> #include <stdl ...
- Java Script语法
JavaScript 语法 JavaScript 是一个程序语言.语法规则定义了语言结构. JavaScript 语法 JavaScript 是一个脚本语言. 它是一个轻量级,但功能强大的编程语言. ...
- PHP判断邮箱地址是否合法的正则表达式
PHP判断邮箱地址是否合法的正则表达式: function checkEmail($inAddress){ return (preg_match("/^([a-zA-Z0-9_-])+@([ ...
- TCP那些事儿
TCP 的那些事儿(上) TCP 的那些事儿(下)
- heike
黑客工具 hacker disassembler engine download IDApro
- Notepad++技巧
1 正则表达式的查找和替换,例如删除每行开始的数字ctrl+H, ^\d\d\d:null 2 删除所有的空行: TextFX插件->Edit->Delete Blank Lines 3 ...
- WIN 7 的vs2008 试用版评估期结束的解决方法
1. 在VS2008安装目录下把Setup/setup.sdb文件中的 [Product Key] T2CRQGDKBVW7KJR8C6CKXMW3D 改成 [Product Key] PYHYPWX ...
- ubuntu日常
1804 处理 1,修改为固定ip vim /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: ...