因为本人比较懒 不想写太过于理论的东西 所以直接开始上操作

微信APIV3支付 开始上操作了

支付前准备
APP_ID:应用id
MchId : 商户号
privateKey :私钥字符串
mchSerialNo :证书序列号
apiV3Key : APIV3秘钥
domain:“”native支付的链接 https://api.mch.weixin.qq.com/v3/pay/transactions/native“”
h5Domain:“”h5支付的请求链接 https://api.mch.weixin.qq.com/v3/pay/transactions/h5“”
notify_url :“”支付成功后的回调地址“”

开始上代码了
导入jar


```java<!--微信支付依赖包--><dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version></dependency><!--微信支付SDK--><dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.3.0</version></dependency><!--发送http请求--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency>

``
支付请求类
package com.tm.forum.common.utils;

import com.alibaba.fastjson.JSONObject;
import com.github.wxpay.sdk.WXPayUtil;
import com.tm.forum.common.utils.ip.IpUtils;
import com.tm.forum.system.domain.order.Order;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.auth.*;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.util.*;

public class WXPayPubUtil {

public static final String APP_ID = "w*****************b";/*** 贸友圈 APPId*/
public static final String M_APP_ID = "wx**********e85";public static final String PARTNER = "1***********01";public static final String PARTNER_KEY = "fsB2b***************888";public static final String PAY_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";public static final String QRY_URL = "https://api.mch.weixin.qq.com/pay/orderquery";/*** 微信支付的AppId*/
public static final String AppId = "w*********0b";/*** 微信支付的商户号(mchid)*/
public static final String MchId = "1********01";/**微信支付的secret参数*/
private static final String Secret = "d81****************27f9e";/*** 私钥字符串*/
public static final String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDwnTWYsG6RwTyu\n" +"L09j6a*************4++YnzMFiXkRkiONjdyS8Iefz5/DEvTuiGgFd\n" +"jqerQVx3x3U7a7RKyUQensjDDbctXLfpiGrwDQs+OOZRQpFHcWqPWrsBfgwfOvqW\n" +"LxRBg1YLvdGjCHcXR2asXO6/IgrcOs8mz1OXkLoWjW/MnIyRS0dX3pxPfdneAeMW\n" +"kbcKgttjDPUJZc7oRvcw0Kdj4NRNjnAIW3A5qwlXHkE+hBzUcPkgZkckROPoXgdY\n" +"0uLgw4Wk*************Y2cCIb\n" +"x/AWWb69AgMBAAECggEBAMTTNQakPK6KbgLmvIC0mel8/xpJI1v9NMeUrqIs6UwO\n" +"cyVXf1HiXvwGZkv1KF2lNsL0*************L7Fc6feVO6++tjCtbW\n" +"o7MrXp7jbLEHhpAubf0NL+f4hkUgQPZDHr0/4cf9kaOlMRm2UQT/6WNR2hML2+pt\n" +"stUlVd1l8gwe2HpKgrr1zatamGKfhnlU8lF8Ny0NOjGh6MQ0MCEU8cgs1LmEHdWr\n" +"jRzF7RfysXavDONCilAePvBJlvkZTEwaCI6utMytLEZFONQMcbcrl2xSTpaSbilk\n" +"MEx7MOyd3pbkKIDCW5*************/05dmHBWGTUUePpV\n" +"ycezES6sg278AhZM+WtXdhO50wIlRPkkVvgdLr3tWMWIBw9WEy+HRhAFIC8oqVga\n" +"meODmExVtBC6quw5D4/SV9658ljDNSXLQLAFdKzSvENhJ2EcGXSiGKw382M0pZNW\n" +"KOJLUY6e8iOntC/dP5JTzZQTjzkCgYEA8USfGbfmdoFLjvRqIYLtnki1//HIzp37\n" +"x2Fyng5Jev1NhbnM6cOTmRK7IjKdHBVFTzKlVuXLCUSIKB65cPk7xdwwjY/7KN3b\n" +"u1sjHj2h5B2U3rKSdaVFsePimjmcUC8uEf8x1iass0kLkEMO7hA1oPK5QKnX4+c6\n" +"POXrW9mS56*************ujTBtXTE9DgY8Z1SpcDqxPgmJM2kUQg\n" +"uN3o+i889qCnbUUHaZKsBLu7ugeB2jVnA+Z+e2SXL+Jdr21+IG38Ufe5und1Pf3g\n" +"xyzMDly0abTd4z47mhzV1nX9LobZAvXU2pejTUVa/36Ri8mUa1aARmXM+uECgYAs\n" +"peZLfBzKEWNKMTDywqf2gr4rfzMKCXJukzoCxeITQIz4Eko5eFf4G99FlNg+OjF5\n" +"VoYCbsQE*************COsGX2Lt880y\n" +"x2cRmlabVwksyTwaEiXagxCFRukM492DJ4lGlhz5gQKBgQCsIdwrUSLivDsf7xqc\n" +"ur6+mM7PruV*************8SrEdwJeLWeK\n" +"1hIsW1naH3*************Q\n" +"zFhKvrPBJ1LgswRZeC90wWq3NA==";/*** 证书序列号*/
public static final String mchSerialNo = "63C*************E";/*** APIv3密钥*/
public static final String apiV3Key = "fsB2b*************88";private static final String domain = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";/*** h5*/
private static final String h5Domain = "https://api.mch.weixin.qq.com/v3/pay/transactions/h5";/*** JSAPI*/
private static final String jsDomain = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/jsapi";/*** 子应用id*/
private static final String sub_appid = "wx6*************e85";/*** 子商户id*/
private static final String sub_mchid = "127*************1";/*** native 支付* @return*/
public static String createNative(Order order) throws IOException {PrivateKey mePrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes(StandardCharsets.UTF_8)));AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(new WechatPay2Credentials(MchId, new PrivateKeySigner(mchSerialNo, mePrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create().withMerchant(MchId, mchSerialNo, mePrivateKey).withValidator(new WechatPay2Validator(verifier)).build();HttpPost httpPost = new HttpPost(domain);JSONObject jsonObject = new JSONObject();JSONObject jsonObject1 = new JSONObject();if (order.getUserId() == 223695) {jsonObject1.put("total" , 1);} else {jsonObject1.put("total" , order.getRmbPrice().longValue() * 100);}jsonObject1.put("currency" , "CNY");jsonObject.put("amount" , jsonObject1);jsonObject.put("mchid" , MchId);jsonObject.put("description" , order.getName());jsonObject.put("notify_url" , "https://api.tr********************/allback");    // 回调地址jsonObject.put("out_trade_no" , order.getOutTradeNo());jsonObject.put("appid" , AppId);StringEntity stringEntity = new StringEntity(jsonObject.toJSONString(), "utf-8");stringEntity.setContentType("application/json");httpPost.setEntity(stringEntity);httpPost.setHeader("Accept" , "application/json");CloseableHttpResponse response = httpClient.execute(httpPost);Integer statusCode = response.getStatusLine().getStatusCode();String codeUrl = EntityUtils.toString(response.getEntity());String qrCode = codeUrl.substring(codeUrl.indexOf("w"), codeUrl.indexOf("}") - 1);// 生成二维码String code = QRCodeUtil.getBase64QRCode(qrCode);return code;
}/***  h5支付* @return*/
public static String mCreateNative(Order order, HttpServletRequest request) throws IOException {PrivateKey mePrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes(StandardCharsets.UTF_8)));AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(new WechatPay2Credentials(MchId, new PrivateKeySigner(mchSerialNo, mePrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create().withMerchant(MchId, mchSerialNo, mePrivateKey).withValidator(new WechatPay2Validator(verifier)).build();HttpPost httpPost = new HttpPost(h5Domain);JSONObject jsonObject = new JSONObject();JSONObject jsonObject1 = new JSONObject();if (order.getUserId() == 223695) {jsonObject1.put("total" , 1);} else {jsonObject1.put("total" , order.getRmbPrice().longValue() * 100);}jsonObject1.put("currency" , "CNY");jsonObject.put("amount" , jsonObject1);JSONObject jsonObject2 = new JSONObject();jsonObject2.put("payer_client_ip" , IpUtils.getIpAddr(request));JSONObject jsonObject3 = new JSONObject();String[] str = {"iOS" , "Android" , "Wap"};jsonObject3.put("type" , "Wap");jsonObject2.put("h5_info" , jsonObject3);jsonObject.put("scene_info" , jsonObject2);jsonObject.put("mchid" , MchId);jsonObject.put("description" , order.getName());//https://api.trademanager.com/api/wechat/callbacjsonObject.put("notify_url" , "https://api******************wechat/callback");jsonObject.put("out_trade_no" , order.getOutTradeNo());jsonObject.put("appid" , APP_ID);System.out.println(jsonObject.toJSONString());StringEntity stringEntity = new StringEntity(jsonObject.toJSONString(), "utf-8");stringEntity.setContentType("application/json");httpPost.setEntity(stringEntity);httpPost.setHeader("Accept" , "application/json");CloseableHttpResponse response = httpClient.execute(httpPost);Integer statusCode = response.getStatusLine().getStatusCode();String codeUrl = EntityUtils.toString(response.getEntity());JSONObject jsonObject4 = JSONObject.parseObject(codeUrl);

// String qrCode = codeUrl.substring(codeUrl.indexOf(“w”), codeUrl.indexOf(“}”) - 1);
// 生成二维码
// String code = QRCodeUtil.getBase64QRCode(qrCode);
return jsonObject4.getString(“h5_url”);
}

/*** @param out_trade_no 订单id* @return*/
public static Map queryPayStatus(String out_trade_no) {Map param = new HashMap();param.put("appid" , APP_ID);param.put("mch_id" , PARTNER);param.put("out_trade_no" , out_trade_no);param.put("nonce_str" , WXPayUtil.generateNonceStr());try {String xmlParam = WXPayUtil.generateSignedXml(param, PARTNER_KEY);HttpUtil client = new HttpUtil(QRY_URL);client.setHttps(true);client.setXmlParam(xmlParam);client.post();String result = client.getContent();Map<String, String> map = WXPayUtil.xmlToMap(result);if (map.get("err_code") != null && map.get("err_code").equals("ORDERNOTEXIST")) {System.out.println("订单不存在!");}if (map.get("trade_state").equals("SUCCESS")) {//支付成功,未支付为:NOTPAY}return map;} catch (Exception e) {e.printStackTrace();return null;}
}/*** 获取微信请求头** @param request* @return* @throws IOException*/
public static String getRequestBody(HttpServletRequest request) throws IOException {ServletInputStream stream = null;BufferedReader reader = null;StringBuffer sb = new StringBuffer();try {stream = request.getInputStream();// 获取响应reader = new BufferedReader(new InputStreamReader(stream));String line;while ((line = reader.readLine()) != null) {sb.append(line);}} catch (IOException e) {throw new IOException("读取返回支付接口数据流出现异常!");} finally {reader.close();}return sb.toString();
}/*** @param order jsApi支付* @return*/
public static String jsApiCreateNative(Order order, HttpServletRequest request) throws IOException {PrivateKey mePrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(privateKey.getBytes(StandardCharsets.UTF_8)));AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(new WechatPay2Credentials(MchId, new PrivateKeySigner(mchSerialNo, mePrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create().withMerchant(MchId, mchSerialNo, mePrivateKey).withValidator(new WechatPay2Validator(verifier)).build();HttpPost httpPost = new HttpPost(jsDomain);JSONObject jsonObject = new JSONObject();JSONObject jsonObject1 = new JSONObject();if (order.getUserId() == 223695) {jsonObject1.put("total" , 1);} else {jsonObject1.put("total" , order.getRmbPrice().longValue() * 100);}jsonObject1.put("currency" , "CNY");jsonObject.put("amount" , jsonObject1);jsonObject.put("sp_mchid" , "");                     // 服务商户号jsonObject.put("sub_mchid" , "");                    // 子商户号jsonObject.put("sp_appid" , "");                     // 服务商应用IDjsonObject.put("sub_appid" , "");                    // 子商户应用IDjsonObject.put("sub_appid" , "");                    // 子商户应用IDjsonObject.put("description" , order.getName());jsonObject.put("notify_url" , "https://api.trademanager.com/api/wechat/callback");jsonObject.put("out_trade_no" , order.getOutTradeNo());JSONObject jsonObject2 = new JSONObject();jsonObject2.put("sp_openid" , "");jsonObject.put("payer" , jsonObject2);                // 支付者信息System.out.println(jsonObject.toJSONString());StringEntity stringEntity = new StringEntity(jsonObject.toJSONString(), "utf-8");stringEntity.setContentType("application/json");httpPost.setEntity(stringEntity);httpPost.setHeader("Accept" , "application/json");CloseableHttpResponse response = httpClient.execute(httpPost);Integer statusCode = response.getStatusLine().getStatusCode();String codeUrl = EntityUtils.toString(response.getEntity());JSONObject jsonObject4 = JSONObject.parseObject(codeUrl);return jsonObject4.getString("prepay_id");
}

}

注: 复制粘贴就能用 改改配置参数 不知道参数这么获取的 官方文档有告诉你参数在哪

spring boot微信h5,native支付 APIV3相关推荐

  1. 一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付

    一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付.

  2. 如何利用Spring Boot 微信点餐开源系统

    由于细节内容实在太多啦,所以只把部分知识点整理出来粗略的介绍,每个小节点里面都有更细化的内容! 接下来开始分享啦 架构 前后端分离: 补充: setting.xml 文件的作用:settings.xm ...

  3. Asp.net 微信H5唤起支付和支付回调

    做任何商城类的项目都离不开支付这一环节,今天就记录一下在开发微信H5支付时的开发过程 在开发到订单这部分模块的时候终于遇到了微信开发第二个难题,微信支付! 首先请阅读 微信JSAPI支付文档  和 微 ...

  4. spring boot 微信 支付宝 集成 开源jm-pay sdk

    微信和支付宝集成封装的sdk 需要自己拉代码到本地进行打包 https://github.com/sunuping/jm-pay.git pom.xml <!--支付宝--><dep ...

  5. 微信html5 支付接口,黄聪:详解申请微信h5支付方法,开通微信h5网页支付接口(转)...

    现在大街小巷的商家都在使用微信支付, 但是一些商家使用的是个人微信收款, 这个虽然很便利, 但是如果你想要数据统计汇总, 让客户在网络上在线付款, 就需要用到微信的h5支付. 微信h5支付 今天子恒老 ...

  6. 详解申请微信h5支付方法,开通微信h5网页支付接口(转)

    现在大街小巷的商家都在使用微信支付, 但是一些商家使用的是个人微信收款, 这个虽然很便利, 但是如果你想要数据统计汇总, 让客户在网络上在线付款, 就需要用到微信的h5支付. 微信h5支付 今天子恒老 ...

  7. Spring Boot 集成支付宝 沙箱支付

    1.沙箱环境简介&基础开发配置 1.进入支付宝官网,扫码进入,网址:https://open.alipay.com/platform/home.htm 2.找到开发服务进入下面的研发服务 3. ...

  8. Spring Boot+微信小程序_保存微信登录者的个人信息

    1. 前言 微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据.这类 API 统称为开放接口. Tip:微信小程序开发平台,会把微信登录用户的个人信息分为明文数据和敏感数 ...

  9. 【快应用】微信H5 referer支付未拉起微信收银台

     现象描述 快应用使用微信H5 referer方式支付, wxpay.pay调用后回调success得到url,但并未拉起微信收银台,无法支付.另外,应用微信h5支付都是通的,在浏览器端是可以直接支付 ...

最新文章

  1. Linux IO实时监控iostat命令详解
  2. 小米6自动重启android,小米6充电重启怎么办 小米6充电自动重启解决方法
  3. Vue入坑——vue-router单页面多路由配置
  4. UITabBarController的一些基础设置
  5. 20155332 缓冲区溢出漏洞实验
  6. 基于Python和MySQL的学生信息管理系统
  7. LightOJ1336
  8. adb 如何提高到最高权限
  9. android sd卡如何读取,Android应用中怎么读取 sd卡中的数据
  10. 全国省市县名称以及区号邮编大全
  11. 《第五堂棒球课》:MLB棒球创造营·棒球名人堂
  12. 西门子1200PLC模拟量测温案例
  13. 2017-2021系统集成项目管理师综合知识易错题整理
  14. 华为模拟器dhcp中继
  15. python解除windows锁屏_用python获取win10锁屏图片
  16. 智慧家庭建平台是智能家居成败关键
  17. matplotlib 用自定义颜色画散点图
  18. VM虚拟机安装树莓派系统
  19. 大型网站技术架构(六)——网站的伸缩性架构
  20. 【信息学奥赛】1033:计算线段长度(C++)

热门文章

  1. layui框架实战案例(16):xm-select下拉多选插件实战记录(远程搜索、过滤、翻页、单选、提示文字)
  2. FX3U源码V10.0
  3. 面条html5,关于晒自己做的面条的说说句子
  4. 自定义组件开发七 自定义容器
  5. 怎样给孩子取一个好名字?搜狗“有名堂”大数据支招
  6. xsmax进入dfu模式_iPhone XR/XS/XS Max 如何进入恢复模式或 DFU 模式?
  7. Pycharm如何打开terminal
  8. Java+MySQL基于ssm的车辆违章管理系统
  9. YAPF —— Python代码格式化工具
  10. Docker与容器的区别