微信免资金代金券(V3版)java代码

本文档详细介绍了如何使用Java实现微信免资金代金券V3版的创建过程,包括接口准备工作、第三方框架IJPay的使用、必要配置及代码示例,同时对微信接口和文档质量提出批评。
摘要由CSDN通过智能技术生成

开始之前先让博主吐槽下微信的接口文档与接口规则。一个代金券的模块搞了3个星期。严重怀疑微信的产品经理跟项目经理有病。写文档的程序员也是。吐槽结束。

一、准备

  1. 微信公众号的AppId和密钥Secret
  2. v3接口的证书号和证书(.pem文件)
  3. v3Api密钥(用于解析核销通知)
  4. 耐心和刀!!(可以随时捅死微信的程序员)

ps:如果是商户自己调用api的话(这一步不做的话会报

body={"code":"INVALID_REQUEST","message":"可用商户不符合规则,请检查"})

需要去商家支付平台开启产品--》https://pay.weixin.qq.com/  在产品中心下--》我的产品--》开通免资金代金券

如果是服务商调用需要进入邀请商户授权,当服务商点击发起授权后,需要商户进入商户平台确认邀请(商户的支付平台在上面消息中心确定授权,不授权的话服务商无法帮商户创建代金券)当商户授权完,商户账号下也需要开启免资金代金券的功能。

二、第三方框架导入

在这里感谢   Javen大佬的 IJPay-WxPay框架

Github地址: https://github.com/Javen205/IJPay

Gitee:http://gitee.com/Javen205/IJPay

<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-WxPay</artifactId>
    <version>2.6.3</version>
</dependency>

本人使用的时候该版本的v3接口还不算太完善,所以我只是使用了这个框架的调用微信v3的请求方法

新的应该已经支持直接调用代金券接口创建了吧。

其他使用到的关键

<!--  阿里json -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
lombok 
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
// 这两个框架可以不加(本人用于测试接口用的,相关配置可以参考对应的文档)
<!-- swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

三、上代码

微信的配置文件

import lombok.Data;

/**
 * @Description: 微信配置
 * @Author: Joshua
 * @CreateDate: 2020/7/16 12:39
 * @Version 1.0
 */
@Data
public class WxConfig {

    public static WxConfig wxConfig;

    /**
     * 服务商appid
     */
    // 服务号
    public final static String APPID = "你的AppId";

    /**
     * secret
     */
    public final static String SECRET = "你的密钥";

    /**
     * v3私钥
     */
    public final static String PRIVATE_KEY = "你的私钥";

    /**
     * v3
     * 证书号(会过期) 40个字符
     */
    public final static String SERIAL_NO = "证书号";

    /**
     * 证书路径(我直接放在项目路径下)
     */
    public final static String KEY_PATH = "../../apiclient_key.pem";

    /**
     * v3
     * API密钥(自己设置的32字符)
     */
    public final static String API_V3_KEY = "v3API密钥";

    /**
     * 服务商商户号(如果你是服务商,如果是商户着就是商户号)
     */
    public final static String MCH_ID = "服务商商户号";

    /**
     * 微信代金券通知地址(必须是https的)
     */
    public final static String COUPON_NOTIFY = "https://...../redirect-anon/wxCouponNotify";

}

请求实体(里面有些字段是我自己需要使用的,其他开发者看着需求更改)

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.persistence.*;

/**
 * 微信优惠券
 *
 * @author Joshua
 * @since 2020-08-01
 */
@Data
@Entity
@Table(name = "wx_coupon")
@ApiModel(value = "WxCoupon", description = " 微信优惠券")
public class WxCoupon implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主鍵Id
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ApiModelProperty(name = "id", value = "id", example = "1")
    private Integer id;

    /**
     * 商户id
     */
    @ApiModelProperty(name = "merchantId", value = "商户id")
    private Integer merchantId;

    /**
     * 子商户号
     */
    @ApiModelProperty(name = "belongMerchant", value = "子商户号")
    private String belongMerchant;

    /**
     * 卡券标题
     */
    @ApiModelProperty(name = "stockName", value = "卡券标题")
    private String stockName;

    /**
     * 开始时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(name = "beginTimestamp", value = "开始时间")
    private
微信支付v3的支付回调是基于异步通知机制进行的,需要在接收支付结果的服务器端编写Java代码来处理回调请求。以下是一个简单的示例代码: ```java import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/pay") public class WechatPayCallbackController { private final WxPayService wxPayService; public WechatPayCallbackController() { // 初始化微信支付服务 wxPayService = new WxPayServiceImpl(); wxPayService.setKey("your-wxpay-api-key"); // 设置支付密钥 } @PostMapping("/callback") public String payCallback(@RequestBody String notifyData) { try { // 解析支付通知 wxPayService.parseNotifyResult(notifyData); // 处理支付成功逻辑,例如更新订单状态等 // 返回成功响应给微信支付平台 return WxPayNotifyResponse.success("处理成功"); } catch (WxPayException e) { // 处理支付失败逻辑,例如记录错误日志等 // 返回失败响应给微信支付平台 return WxPayNotifyResponse.fail(e.getMessage()); } } } ``` 上述代码是一个使用Spring Boot框架的控制器类,负责处理微信支付的回调请求。在回调方法`payCallback`中,通过`wxPayService.parseNotifyResult`方法解析支付通知的XML数据,并在处理成功或失败后返回相应的结果。 需要注意的是,为了保证安全性,建议在实际开发中将`your-wxpay-api-key`替换为实际的支付密钥。 另外,此代码仅作为示例,实际情况可能需要结合具体的业务逻辑进行扩展和修改。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值