java实现微信扫码支付功能
作者:品学兼忧 发布时间:2023-11-09 18:38:08
标签:java,微信,扫码支付
本文实例为大家分享了java实现微信扫码支付的具体代码,供大家参考,具体内容如下
1、maven项目的pom.xml中添加如下jar包:
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
2、编写WeWxConfig类:
package com.xx.wxpay;
import com.github.wxpay.sdk.WXPayConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.InputStream;
/**
* 描述:微信支付配置信息
*
* @author ssl
* @create 2018/04/24 19:25
*/
@Component
public class WeWxConfig implements WXPayConfig {
@Value("${wechat.public.appid}")
private String appId;
@Value("${wechat.merchant}")
private String mchId;
@Value("${wechat.public.apikey}")
private String apiKey;
/**
* 公众账号ID:微信支付分配的公众账号ID(企业号corpid即为此appId)
*
* @return
*/
@Override
public String getAppID() {
return appId;
}
/**
* 商户号:微信支付分配的商户号
*
* @return
*/
@Override
public String getMchID() {
return mchId;
}
/**
* @return
*/
@Override
public String getKey() {
return apiKey;
}
@Override
public InputStream getCertStream() {
return null;
}
@Override
public int getHttpConnectTimeoutMs() {
return 0;
}
@Override
public int getHttpReadTimeoutMs() {
return 0;
}
}
3、编写WeWxPayService:
package com.xx.wxpay;
import com.alibaba.fastjson.JSONObject;
import com.github.wxpay.sdk.WXPay;
import com.google.common.collect.Maps;
import com.xx.model.Order;
import com.xx.model.Product;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
/**
* 描述:
*
* @author ssl
* @create 2018/04/24 20:15
*/
@Service
public class WeWxPayService {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Value("${project.url}")
private String projectUrl;
@Autowired
private WeWxConfig weWxConfig;
/**
* 统一下单
*
* @param product
* @param order
* @return
*/
public Map<String, String> unifiedOrder(Product product, Order order) {
Map<String, String> data = Maps.newHashMap();
WXPay wxpay = new WXPay(weWxConfig);
data.put("body", "XX-" + product.getName());
data.put("detail", "详细信息");
data.put("out_trade_no", order.getOrderNo());
data.put("device_info", "WEB");
data.put("fee_type", "CNY");
data.put("total_fee", order.getAmount() + "");
data.put("spbill_create_ip", "127.0.0.1");
data.put("notify_url", projectUrl + "/base/order/notifyUrl");
data.put("trade_type", "NATIVE"); // 此处指定为扫码支付
data.put("product_id", product.getId() + "");
try {
Map<String, String> resp = wxpay.unifiedOrder(data);
logger.debug(JSONObject.toJSONString(resp));
return resp;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 订单查询
*
* @param orderNo:订单号
* @return
*/
public Map<String, String> orderQuery(String orderNo) {
Map<String, String> reqData = Maps.newHashMap();
reqData.put("out_trade_no", orderNo);
WXPay wxpay = new WXPay(weWxConfig);
try {
Map<String, String> resp = wxpay.orderQuery(reqData);
logger.debug(JSONObject.toJSONString(resp));
return resp;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String getUrl() {
WXPay wxpay = new WXPay(new WeWxConfig());
Map<String, String> data = new HashMap<String, String>();
data.put("body", "上屏名称");
data.put("detail", "商品详情");
data.put("out_trade_no", "2ab9071b06b9f739b950ddb41db2690d");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "218.17.160.245");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "NATIVE"); // 此处指定为扫码支付
data.put("product_id", "12");
try {
Map<String, String> resp = wxpay.unifiedOrder(data);
System.out.println(resp);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
4、调用:
/** 向微信支付系统下单,并得到二维码返回给用户 */
Map<String, String> resData = weWxPayService.unifiedOrder(product, order);
5、resData.get("code_url")为微信下单成功后返回的二维码地址,页面中用QRCode.js来显示该二维码,且该页面用定时器定时查询订单支付状态
来源:https://blog.csdn.net/ZuoYanYouYan/article/details/80225553


猜你喜欢
- 最近在做毕业设计,想有一个功能和QQ一样可以裁剪头像并设置圆形头像,额,这是设计狮的一种潮流。而纵观现在主流的APP,只要有用户系统这个功能
- 文章开始之前,先看一下效果图,看是不是您正所需要的:一、构建计算器的界面要构建出一个好看点的计算器界面,还是需要颇费些小心思的,我做这个的时
- 前言本篇文章将教你作为一个.NET程序员如何快入门Spring Boot。你不需要用Eclipse,也不需要用IDEA。已经习惯了VS,其他
- 1、输出矩形以此矩形案例(4行,9列的矩形)为例public static void main(String[] args) {  
- 提示:这里可以添加本文要记录的大概内容:例如:一般系统前端调用后台相关功能接口时,需要验证此时用户的权限是否满足调用该接口的条件,因此我们需
- 现在项目中有使用到音视频相关技术,在参考了网上各种大牛的资料及根据自己项目实际情况(兼容安卓6.0以上版本动态权限管理等),把声音录制及播放
- 1 起因在实际业务开发中, 我们经常会遇到需要临时创建一个数组的情况, 今天我们就来讲一下Java中ArrayList初始化的方法2 解决方
- Toast是一种简易的消息提示框,它无法获取焦点,按设置的时间来显示完以后会自动消失,一般用于帮助或提示。先给大家分享下我的解决思路:不用计
- 本文实例讲述了JAVA设计模式之备忘录模式。分享给大家供大家参考,具体如下:备忘录模式:又叫做快照模式,指在不破坏封装性的前提下,获取到一个
- 在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统
- 前置导入什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼
- 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下:当想到所有文件都转换为 XML时,确实是一件好事。但是,这并
- google benchmark已经为我们提供了类似的功能,而且使用相当简单。具体的解释在后面,我们先来看几个例子,我们人为制造几个时间复杂
- 本文实例讲述了Java算法之最长公共子序列问题(LCS)。分享给大家供大家参考,具体如下:问题描述:一个给定序列的子序列是在该序列中删去若干
- 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某
- 本文实例讲述了C#使用iTextSharp将PDF转成文本的方法。分享给大家供大家参考。具体实现方法如下:using System;usin
- 以下四种方式:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象
- 一、常见非托管资源Windows窗口句柄、数据库链接、GDI对象、独占文件锁等等对象ApplicationContext,Brush,Com
- 前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类。
- 不得已重新配置,这里记下详细步骤,分享给大家。一、安装jdk,具体步骤如下:1、将jdk-7u4-linux-i586.tar拷贝到linu