java完成小程序微信支付

   这个是官方地址详细可以看这个

 1.先注册微信商户平台

    1.1在下面链接获取微信支付的商户api证书和商户的秘钥
          商户API证书获取方法及功能介绍 - 腾讯客服 (qq.com)      
    1.2 在微信商户平台这获取api秘钥

1.3 获取商户号在微信商户平台

2.然后引入微信支付的官方开发包(此处是我的版本号是集中的版本管理请看实际情况选择版本)

     //微信支付
     <dependency>
           <groupId>com.github.wechatpay-apiv3</groupId>
           <artifactId>wechatpay-java</artifactId>
           <version>${wechatpay.version}</version>
     </dependency>

 2.调取微信支付

     2.1  在nacos中配置对应的商户号和appid 秘钥 商户序列号等

   2.2 将获取的微信证书放在项目的resources文件夹下

    

  2.3首先创建微信支付调用的service
 
@Service
@AllArgsConstructor
public class WxPayServiceImpl implements WxPayService {
    private final WxPayUtil wxPayUtil;

    private final GoodsOrderMapper goodsOrderMapper;

    private final RabbitTemplate rabbitTemplate;
    @Override
    public PrepayWithRequestPaymentResponse wxPay(WxPayDTO dto) {
        return wxPayUtil.wxPay(dto);
    }
}
  2.4 创建微信支付的工具类
@Component
@ConfigurationProperties(prefix = "wx.pay")
@Data
public class WxPayUtil {

    private String merchantId;
    private String merchantSerialNumber;
    private String apiV3Key;



    //微信支付
    public PrepayWithRequestPaymentResponse wxPay(WxPayDTO dto) {
        URL resource = WxPayUtil.class.getResource("/apiclient_key.pem");
        Config config =
                new RSAAutoCertificateConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(resource.getPath())
                        .merchantSerialNumber(merchantSerialNumber)
                        .apiV3Key(apiV3Key)
                        .build();
        // 构建service
        JsapiServiceExtension service = new JsapiServiceExtension.Builder().config(config).build();
        // request.setXxx(val)设置所需参数,具体参数可见Request定义
        PrepayRequest request = new PrepayRequest();
        Payer payer = new Payer();
        Amount amount = new Amount();
        int amountInFen = dto.getTotal().multiply(new BigDecimal(100)).intValue();
        payer.setOpenid(dto.getOpenid());
        amount.setTotal(amountInFen);
        request.setDescription(dto.getGoodsTitle());
        request.setOutTradeNo(dto.getOutTradeNo());
        request.setAmount(amount);
        request.setPayer(payer);
        request.setAppid("wxaf6dbadb6ce98429");
        request.setMchid(merchantId);
        request.setNotifyUrl("https://api.renshy.com/client/pay/wxCallback");
        // 调用下单方法,得到应答
        PrepayWithRequestPaymentResponse prepayWithRequestPaymentResponse = service.prepayWithRequestPayment(request);
        // 使用微信扫描 code_url 对应的二维码,即可体验Native支付
        return prepayWithRequestPaymentResponse;
    }


    /**
     * 从 HttpServletRequest 中获取请求体。
     *
     * @param request HTTP 请求对象
     * @return 请求体字符串
     */
    public String getRequestBody(HttpServletRequest request) {
        StringBuilder requestBody = new StringBuilder();
        try (java.io.BufferedReader reader = request.getReader()) {
            String line;
            while ((line = reader.readLine()) != null) {
                requestBody.append(line);
            }
        } catch (Exception e) {
            // 处理读取请求体时可能出现的异常
            e.printStackTrace();
        }
        return requestBody.toString();
    }
}
     2.5 创建controller层调用
@RestController
@AllArgsConstructor
@RequestMapping("pay")
public class PayController {

    private final WxPayService wxPayService;

    /**
     * 调用微信支付
     * @return
     */
    @PostMapping("/wxPay")
    @Identity(role = RoleConstants.USER)
    public Result saveGoodsOrder(@RequestBody WxPayDTO dto) {
        return Result.success(wxPayService.wxPay(dto));
    }
}
返回值是这样的,然后在小程序调用即刻

 

下一章会写微信回调和通过内网穿透测试本地

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java对接小程序微信支付V3可以按照以下步骤进行: 1. 首先,需要通过微信商户平台注册一个商户账号,并获取到商户号和API密钥。 2. 接下来,在Java项目中导入微信支付相关的SDK或者库文件,例如使用Apache HttpClient库发送HTTP请求,以及使用JSON库处理返回的JSON数据。 3. 获取到用户的支付请求后,需要构建一个统一下单的请求参数。包括商户号、应用ID、商户订单号、商品描述、订单总金额、终端IP等必要的信息。然后将这些信息进行签名,生成签名值。 4. 将构建好的统一下单请求参数通过HTTP POST请求发送给微信支付服务器的统一下单接口。可以使用Apache HttpClient库来发送请求并获取响应。 5. 收到微信支付服务器的返回结果后,需要对返回结果进行验签。验证返回结果的签名是否正确,确保返回结果的可信度。 6. 如果验签通过,可以根据返回结果中的prepay_id生成小程序支付所需的支付参数。包括时间戳、随机字符串、签名类型等信息,并进行签名。然后将这些支付参数返回给小程序,供小程序调起微信支付。 7. 在小程序中调起微信支付时,使用小程序支付参数调用微信支付API,完成支付过程。 8. 在支付完成后,根据接口的回调结果进行支付结果的处理。可以通过查询订单接口查询订单的支付状态,以及根据自己业务的需要进行相应的操作。 以上是Java对接小程序微信支付V3的基本步骤,需要注意的是,可能会有一些详细的操作和配置,根据具体情况进行处理。同时,在每一步操作中,需要注意参数的正确性和安全性,确保支付流程的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值