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来显示该二维码,且该页面用定时器定时查询订单支付状态

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java服务端微信APP支付接口详解

    一.微信APP支付接入商户服务中心 [申请流程指引] (https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317780&token=84f23b4e9746c5963128711f225476cfd49ccf8c&lang=zh_CN) 二.开始开发 1.配置相关的配置信息 1.1.配置appid(Androi

  • 微信支付H5调用支付详解(java版)

    最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验. 一.配置公众号微信支付  需要我们配置微信公众号支付地址和测试白名单. 比如:支付JS页面的地址为 http://www.xxx.com/shop/pay/ 那此处配置www.xxx.com/shop/pay/ 二.开发流程 借用微信公众号支付api(地址 http://pay.weixin.qq.com/wiki/d

  • java开发微信公众号支付

    最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时间,也只是达到了实现功能的水平,并没有太多考虑到性能问题,所以这篇文章比较适合初学者. 微信公众号支付的总体其实很简单,大致就分为三步.第一步需要获取用户授权:第二步调用统一下单接口获取预支付id:第三步H5调起微信支付的内置的js.下面介绍具体每一步的开发流程. 一    首先要明确微信公众号支付属于网页版支付,所以相较于app的直接调取微信支付要多一步微信授权.也就是需要获取用户的openid.微信公众号使用的交易类型是JSAPI,

  • Java通过JsApi方式实现微信支付

    要使用JsApi进行微信支付,首先要从微信获得一个prepay_id,然后通过调用微信的jsapi完成支付,JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回.由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分. 示例代码如下: function onBridgeReady(){ WeixinJSBridge

  • Java编程调用微信支付功能的方法详解

    本文实例讲述了Java编程调用微信支付功能的方法.分享给大家供大家参考,具体如下: 微信开发文档地址:https://mp.weixin.qq.com/wiki/home/ 从调用处开始 我的流程: 1.点击"支付"按钮,去后台 --> 2.后台生成支付所需数据返回页面 --> 3.页面点击"确认支付"调用微信支付js.完成支付功能. 支付按钮 <div class="button" id="pay" onc

  • java实现微信支付(服务端)

    废话不多说,直接看代码. RequestHandler requestHandler = new RequestHandler(super.getRequest(),super.getResponse()); //获取token //两小时内有效,两小时后重新获取 Token = requestHandler.GetToken(); //更新token 到应用中 requestHandler.getTokenReal(); System.out.println("微信支付获取token=====

  • Java微信支付之公众号支付、扫码支付实例

    微信支付现在已经变得越来越流行了,随之也出现了很多以可以快速接入微信支付为噱头的产品,不过方便之余也使得我们做东西慢慢依赖第三方,丧失了独立思考的能力,这次打算分享下我之前开发过的微信支付. 一 .H5公众号支付 要点:正确获取openId以及统一下单接口,正确处理支付结果通知,正确配置支付授权目录 H5的支付方式是使用较为广泛的方式,这种支付方式主要用于微信内自定义菜单的网页,依赖手机上安装的微信客户端,高版本的微信才支持微信支付,下面按我的流程注意说明 1  编写用于支付的页面,由于是测试用

  • 微信小程序 支付后台java实现实例

    微信小程序 支付后台java实现实例 前言: 前些天使用 LeanCloud 云引擎写了个小程序的支付相关 以前只做过 APP 支付 这次在小程序支付爬了两天的坑 把代码也分享出来 支付流程: 1.小程序前端获取微信 openId 以及订单号 传给后台 2,后台根据 openId 和订单号进行签名 post 微信统一下单接口 3.后台获取微信返回的xml字符串 解析 二次签名以后返回给前端 4.前端调起支付微信支付 API 先看支付函数: //获取支付信息 @EngineFunction("ge

  • 微信支付java版本之查询订单

    本文实例为大家分享了微信支付订单的查询接口,供大家参考,具体内容如下 1.接口简介 2.代码实现 package com.zhrd.bussinss.platform.controller.shop; import java.io.File; import java.io.FileInputStream; import java.security.KeyStore; import java.text.SimpleDateFormat; import java.util.Date; import

  • java实现微信H5支付方法详解

    前面做了app微信支付的回调处理,现在需要做微信公众号的支付,花了一天多时间,终于折腾出来了!鉴于坑爹的微信官方没有提供Java版的demo,所以全靠自己按照同样坑爹的文档敲敲敲,所以记录下来,以供自己及后来人参考,不足之处,还请指正. 首先,我们贴出调用支付接口的H5页面,当然,在这个页面之前,还需要做很多其他的操作,我们一步一步的来. 坑爹的官方文档给了两个不同的支付接口,在微信公众平台开发中文档的"微信JS-SDK说明文档"中,给出的支付方式是下面被屏蔽的那一部分,而在商户平台的

随机推荐