PC、微信小程序简单对接微信支付

导包

    <dependency>
        <groupId>com.github.wechatpay-apiv3</groupId>
        <artifactId>wechatpay-java</artifactId>
        <version>0.2.12</version>
    </dependency>

申请配置信息

# 微信支付配置
# 商户号
merchantId: xxxxxxxx
# 商户API私钥路径
privateKeyPath: xxxxx\apiclient_key.pem
# 商户证书序列号
merchantSerialNumber: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 商户证书路径
wechatPayCertificatePath: xxxxxx\platform.pem
# APPID
appID: xxxxxxxxxxxx
# 支付成功回调地址
notifyUrl: https://xxxxxxxxxxxxxxxxx
# 小程序需要的配置
apiV3Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

核心支付代码

    /**
     * 商户号
     */
    @Value("${merchantId}")
    private String merchantId;
    /**
     * 商户API私钥路径
     */
    @Value("${privateKeyPath}")
    private String privateKeyPath;
    /**
     * 商户证书序列号
     */
    @Value("${merchantSerialNumber}")
    private String merchantSerialNumber;
    /**
     * 商户证书路径
     */
    @Value("${wechatPayCertificatePath}")
    private String wechatPayCertificatePath;

    /**
     * APPID
     */
    @Value("${appID}")
    private String appID;
    /**
     * 支付成功回调地址(必须是https请求)
     */
    @Value("${notifyUrl}")
    private String notifyUrl;
    
public String addGroupPurchase(需要的参数) throws Exception {
 /**
         * 创建微信支付
         */
        RSAConfig config =
                new RSAConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(privateKeyPath)
                        .merchantSerialNumber(merchantSerialNumber)
                        .wechatPayCertificatesFromPath(wechatPayCertificatePath)
                        .build();
        // 初始化服务
        NativePayService service = new NativePayService.Builder().config(config).build();
        PrepayRequest request = new PrepayRequest();
        request.setAppid(appID);
        request.setMchid(merchantId);
        request.setOutTradeNo(商户订单号);
        request.setDescription(商品描述);
        request.setNotifyUrl(url);
        Amount amount = new Amount();
        amount.setTotal(金额);
        amount.setCurrency("CNY");
        request.setAmount(amount);
        // 调用接口
        PrepayResponse prepay = service.prepay(request);
        return prepay.getCodeUrl();// 支付的URL返回前端生成二维码
    }
                        

官网代码链接

小程序对接微信支付

配置类大同小异、也可以使用其他配置类
wxPay() {
Config config = new RSAAutoCertificateConfig.Builder()
                .merchantId(merchantId)
                .privateKeyFromPath(privateKeyPath)
                .merchantSerialNumber(merchantSerialNumber)
                .apiV3Key(apiV3Key)
                .build();
		// 创建JSAPI支付服务实例
        JsapiService jsapiService = new JsapiService.Builder().config(config).build();
        // 1. 构建支付请求
        PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(金额); // 转成分
        amount.setCurrency("CNY");

        request.setAppid(appID);
        request.setMchid(merchantId);
        request.setDescription(商品描述);
        request.setOutTradeNo(订单编号/商户订单号);// 此处单号每次生成支付链接有效期内不能重复
        request.setAmount(amount);
        request.setNotifyUrl(回调地址);// 可拼接参数,回调修改数据支付状态等信息

        // 设置支付者信息
        Payer payer = new Payer();
        payer.setOpenid(openId);//openId微信用户标识可前端传入
        request.setPayer(payer);

        // 2. 调用统一下单接口
        PrepayResponse response = jsapiService.prepay(request);

        // 3. 生成小程序支付参数
        String prepayId = response.getPrepayId();
        String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
        String nonceStr = NonceUtil.createNonce(32);

        // 4. 构造签名串(严格按照微信要求顺序)
        String signData = String.format("%s\n%s\n%s\n%s\n", appID, timeStamp, nonceStr, "prepay_id=" + prepayId);

        // 5. 生成签名
        String signature = config.createSigner().sign(signData).getSign();

        // 6. 返回支付参数
        Map<String, Object> payParams = new HashMap<>();
        payParams.put("appId", appID);
        payParams.put("timeStamp", timeStamp);
        payParams.put("nonceStr", nonceStr);
        payParams.put("package", "prepay_id=" + prepayId);
        payParams.put("signType", "RSA");
        payParams.put("paySign", signature);
		// 7.返回上一步map参数给前端吊起微信支付
		return payParams;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值