taro+spring boot对接微信支付

 主要依赖

implementation 'com.github.wechatpay-apiv3:wechatpay-java:0.2.10'

微信支付证书自动更新配置
@Configuration
public class WxPayAutoCertificateConfig {

    @Resource
    private WxPayConfig wxPayConfig;

    @Bean
    public RSAAutoCertificateConfig rsaAutoCertificateConfig() {
        RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder()
                .merchantId(wxPayConfig.getMerchantId())
                .privateKeyFromPath(WxPayAutoCertificateConfig.class.getClassLoader().getResource(wxPayConfig.getPrivateKey()).getPath()) //apiclient_key.pem文件地址
                .merchantSerialNumber(wxPayConfig.getMerchantSerialNumber())
                .apiV3Key(wxPayConfig.getApiV3Key())
                .build();
        return config;
    }
}

java获取预支付参数

@RestController
@RequestMapping("/wx/pay")
public class WxPayController {
    @Autowired
    private WxPayAutoCertificateConfig wxPayAutoCertificateConfig;

    @Autowired
    private WxPayConfig wxPayConfig;

    @PostMapping("/prepay")
    public R wxPrepay(@RequestBody Order order) {
        //请求微信支付相关配置
        JsapiServiceExtension service =
                new JsapiServiceExtension.Builder()
                        .config(wxPayAutoCertificateConfig.rsaAutoCertificateConfig())
                        .signType("RSA") // 默认为RSA
                        .build();
        PrepayWithRequestPaymentResponse response = new PrepayWithRequestPaymentResponse();
        try {
            PrepayRequest request = new PrepayRequest();
            request.setAppid(wxPayConfig.getAppId());
            request.setMchid(wxPayConfig.getMerchantId());
            request.setDescription(order.getDescription());
            request.setOutTradeNo(order.getOrderNo());
            request.setNotifyUrl(wxPayConfig.getPayNotifyUrl());
            Amount amount = new Amount();
            //微信支付金额单位是分
            amount.setTotal(order.getAmount().multiply(new BigDecimal(100)).intValue());
            request.setAmount(amount);
            Payer payer = new Payer();
            payer.setOpenid(wxPayConfig.getOpenid());
            request.setPayer(payer);
            logger.info("请求预支付下单,请求参数:{}", JSONObject.toJSONString(request));
            // 调用预下单接口
            response = service.prepayWithRequestPayment(request);
            logger.info("订单【{}】发起预支付成功,返回信息:{}", order.getOrderNo(), response);
        } catch (HttpException e) { // 发送HTTP请求失败
            logger.error("微信下单发送HTTP请求失败,错误信息:{}", e.getHttpRequest());
            return R.error("下单失败");
        } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500
            logger.error("微信下单服务状态错误,错误信息:{}", e.getErrorMessage());
            return R.error("下单失败");
        } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败
            logger.error("服务返回成功,返回体类型不合法,或者解析返回体失败,错误信息:{}", e.getMessage());
            return R.error("下单失败");
        }
        return R.data(response);
    }
}

小程序通过requestPayment方法调用支付

const { appId, timeStamp, nonceStr, packageVal, paySign, signType } = response.data;
Taro.requestPayment({
    timeStamp,
    nonceStr,
    package: packageVal,
    signType,
    paySign,
    success(res) {
        console.log('支付成功', res);
     },
    fail(res) {
        console.error('支付失败', res);
    }
});

最后还需要有回调接口接收支付结果

public synchronized R payNotify(HttpServletRequest request) throws IOException {
        logger.info("------收到支付通知------");
        // 构造 RequestParam
        RequestParam requestParam = new RequestParam.Builder()
                .serialNumber(request.getHeader("Wechatpay-Serial"))
                .nonce(request.getHeader("Wechatpay-Nonce"))
                .signature(request.getHeader("Wechatpay-Signature"))
                .timestamp(request.getHeader("Wechatpay-Timestamp"))
                .signType(request.getHeader("Wechatpay-Signature-Type"))
                .body(HttpServletUtils.getRequestBody(request))
                .build();

        NotificationParser parser = new NotificationParser(wxPayAutoCertificateConfig.rsaAutoCertificateConfig());
        logger.info("验签参数:{}", requestParam);
        Transaction transaction = parser.parse(requestParam, Transaction.class);
        logger.info("验签成功!-支付回调结果:{}", transaction.toString());
        return R.data(transaction);
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在微信小程序中,我们可以使用下拉刷新组件来刷新页面。在 Taro + Vue3 中,可以通过在页面的配置对象中添加 `enablePullDownRefresh: true` 来启用下拉刷新功能。 具体步骤如下: 1. 在页面的配置对象中添加 `enablePullDownRefresh: true`。 ```javascript export default { enablePullDownRefresh: true, // ... } ``` 2. 在页面的方法中添加 `onPullDownRefresh` 方法,该方法会在用户下拉刷新时触发。 ```javascript export default { enablePullDownRefresh: true, onPullDownRefresh() { // 执行刷新操作 }, // ... } ``` 3. 在 `onPullDownRefresh` 方法中编写刷新操作的代码。例如,我们可以重新请求数据,并更新页面渲染。 ```javascript export default { enablePullDownRefresh: true, async onPullDownRefresh() { // 重新请求数据 const newData = await this.fetchData() // 更新页面渲染 this.dataList = newData // 停止下拉刷新 Taro.stopPullDownRefresh() }, // ... } ``` 4. 最后,在页面中添加下拉刷新组件。可以使用 Taro UI 的 `AtPullDownRefresh` 组件,也可以自定义组件。 ```html <template> <!-- 使用 Taro UI 的 AtPullDownRefresh 组件 --> <view> <at-pull-down-refresh v-model="isRefreshing" color="#999" background-color="#f7f7f7" bind:refresh="onPullDownRefresh" > <view class="status" slot="status"> {{ isRefreshing ? '正在刷新...' : '下拉刷新' }} </view> </at-pull-down-refresh> <!-- 渲染数据列表 --> <view v-for="item in dataList" :key="item.id"> {{ item.title }} </view> </view> </template> ``` 以上就是在 Taro + Vue3 中实现微信小程序下拉刷新的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值