Conexión de Java con pago de WeChat: pago JSAPI (pago de cuenta pública de WeChat)

Este artículo es el artículo [Pago WeChat JSAPI], que explica principalmente cómo los comerciantes se conectan al pago WeChat y se prueba la versión simple.


1. Preparación antes del acceso al pago JSAPI

1. El pago JSAPI primero requiere el registro y la certificación de una cuenta pública (alrededor de 300 yuanes al año)

Registro de cuenta pública de WeChat

2. Solicite convertirse en comerciante. Hay muchos tipos de comerciantes (comerciantes comunes, proveedores de servicios, comerciantes especiales, etc.). Solicite según sus propias necesidades.

Solicitud de comerciante

3. Asociación entre la cuenta pública de WeChat y el comerciante

        3.1 Inicie sesión en la cuenta oficial de WeChat y asocie la cuenta comercial con la cuenta de la aplicación

         3.2 Número de comercio asociado

 Haga clic en Agregar y complete el enlace de acuerdo con las instrucciones....

4. Obtenga el ID de aplicación y el número de comerciante

        4.1 Inicie sesión en la cuenta oficial de WeChat , ingrese al directorio [Configuración básica] y obtenga el ID de aplicación de la cuenta oficial, como se muestra en la figura

         4.2 Inicie sesión en la cuenta de comerciante de WeChat Pay , ingrese [Centro de cuentas->Información de cuenta->ID de comerciante de WeChat Pay y obtenga la cuenta de comerciante de WeChat Pay,  como se muestra en la figura

 5. Inicie sesión en la plataforma comercial WeChat , ingrese al directorio [Centro de cuentas> Seguridad API] y configure la clave APIV3. Si hay documentos oficiales, no entraré en detalles aquí.

2. Fragmentos de código

1.Introducir dependencias de Maven

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

2. Interfaz de solicitud empresarial de backend

Modifíquelo y utilícelo según sus propias necesidades comerciales. Los parámetros se basan en sus propias necesidades. El código es el siguiente (ejemplo JSAPI): 

     /** 商户号*/
    @Value("${wx.mchId}")
    private String mchId;

    /** 公众号appid*/
    @Value("${wx.appId}")
    private String appId;

    /** 商户APIV3密钥*/
    @Value("${wx.apiV3Key}")
    private String apiV3Key;

    /**微信回调地址*/
    @Value("${wx.v3PayNotifyUrl}")
    private String v3PayNotifyUrl;

    /** 商户证书序列号 */
    @Value("${wx.merchantSerialNumber}")
    private String merchantSerialNumber;

    public static RSAAutoCertificateConfig config = null ;
    public static JsapiServiceExtension service = null ;

@GetMapping("/prepay")
    public PrepayWithRequestPaymentResponse WeChartPay(String amountString) {
      
        String openId = "oI*******************iGiA";
        // 订单号
        String orderUuid = IdUtils.getUUID();
        //元转换为分
        Integer amountInteger = Integer.valueOf(AmountUnitConversionUtil.changeYuanAndFen(amountString));
        //私钥文件路径(本地自己测试看自己的私钥文件存放路径)
        String filePath ="***/***/***/apiclient_key.pem";//测试环境可放到resource目录下

        // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
        if (config == null) {
            config =new RSAAutoCertificateConfig.Builder()
                            .merchantId(mchId)
                            .privateKeyFromPath(filePath)
                            .merchantSerialNumber(merchantSerialNumber)
                            .apiV3Key(apiV3Key)
                            .build();
        }
        // 构建service
        if (service == null) {
            service = new JsapiServiceExtension.Builder().config(config).build();
        }

        //组装预约支付的实体
        // request.setXxx(val)设置所需参数,具体参数可见Request定义
        PrepayRequest request = new PrepayRequest();
        //计算金额
        Amount amount = new Amount();
        amount.setTotal(amountInteger);
        amount.setCurrency("CNY");
        request.setAmount(amount);
        //公众号appId
        request.setAppid(appId);
        //商户号
        request.setMchid(mchId);
        //支付者信息
        Payer payer = new Payer();
        payer.setOpenid(openId);
        request.setPayer(payer);
        //描述
        request.setDescription("支付测试");
        //微信回调地址,需要是https://开头的,必须外网可以正常访问
        //本地测试可以使用内网穿透工具,网上很多的
        request.setNotifyUrl(v3PayNotifyUrl);
        //订单号
        request.setOutTradeNo(orderUuid);
        // 加密
        PrepayWithRequestPaymentResponse payment = service.prepayWithRequestPayment(request);
        //默认加密类型为RSA
        payment.setSignType("MD5");
       //返回数据,前端调起支付
    return payment;

3. El front-end llama al método de solicitud de pago.

function onBridgeReady(){
   WeixinJSBridge.invoke(
      'getBrandWCPayRequest', {
         "appId":"wx2421b1c4370ec43b",     //公众号ID,由商户传入     
         "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
         "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
         "package":"prepay_id=u802345jgfjsdfgsdg888",     
         "signType":"MD5",         //微信签名方式:     
         "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
      },
      function(res){
      if(res.err_msg == "get_brand_wcpay_request:ok" ){
      // 使用以上方式判断前端返回,微信团队郑重提示:
            //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
      } 
   }); 
}
if (typeof WeixinJSBridge == "undefined"){
   if( document.addEventListener ){
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
   }else if (document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
   }
}else{
   onBridgeReady();
}

Resumir


Lo anterior es una prueba de pago WeChat JSAPI implementada de acuerdo con los documentos oficiales. No entraré en detalles sobre la interfaz de devolución de llamada de WeChat. Deje un mensaje si lo necesita. Si tiene alguna pregunta, puede dejar un mensaje para discutir y ¡aprender juntos!

Supongo que te gusta

Origin blog.csdn.net/m0_57007247/article/details/130083768
Recomendado
Clasificación