java实现微信扫码支付功能

作者:品学兼忧 时间:2023-11-09 18:38:08 

本文实例为大家分享了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

标签:java,微信,扫码支付
0
投稿

猜你喜欢

  • 深入分析JAVA 建造者模式

    2023-03-14 01:32:27
  • Javaweb动态开发最重要的Servlet详解

    2023-04-09 20:11:17
  • Android 读取文件内容实现方法总结

    2022-09-15 12:57:56
  • springboot使用log4j2异步日志提升性能的实现方式

    2021-05-31 16:54:55
  • 关于SpringBoot使用Redis空指针的问题(不能成功注入的问题)

    2023-09-04 01:30:03
  • Spring Boot中@Conditional注解介绍

    2022-03-03 15:23:37
  • tk.Mybatis 插入数据获取Id问题

    2023-07-01 22:03:13
  • Spring Boot使用profile如何配置不同环境的配置文件

    2023-11-25 12:52:36
  • Textvie实现左边图片和换行文字左对齐的方法

    2022-10-30 23:15:16
  • C# 开发step步骤条控件详解

    2021-07-01 00:53:14
  • Java 客户端操作 FastDFS 实现文件上传下载替换删除功能

    2022-06-01 15:01:38
  • java IO流文件的读写具体实例

    2023-08-21 04:44:34
  • Java常用线程池原理及使用方法解析

    2022-02-22 17:00:23
  • SVN报错:Error Updating changes:svn:E155037的解决方案

    2023-06-11 07:27:11
  • Java 常见的几种内存溢出异常的原因及解决

    2023-02-21 16:44:50
  • Android注解基础介绍快速入门与解读

    2023-04-30 22:32:19
  • Java编程用两个栈实现队列代码分享

    2023-03-22 01:05:05
  • C#微信公众平台开发之高级群发接口

    2021-08-19 15:44:28
  • Android Intent调用 Uri的方法总结

    2021-11-13 22:46:53
  • 解决Maven多模块编译慢的问题

    2022-10-09 23:58:02
  • asp之家 软件编程 m.aspxhome.com