Java と WeChat 決済のドッキング: JSAPI 決済 (WeChat パブリック アカウント決済)

この記事は[WeChat JSAPI Payment]の記事であり、主に加盟店がWeChat決済にどのように接続するかを説明し、簡易版をテストしています


1. JSAPI決済アクセス前の準備

1. JSAPI支払いにはまず公的アカウントの登録と認証が必要です(年間約300元)

WeChatパブリックアカウント登録

2. 加盟店の申し込み 加盟店にはさまざまな種類(一般加盟店、サービスプロバイダー、特約店など)がございますので、ご自身のニーズに合わせてお申し込みください。

加盟店申請

3. WeChatパブリックアカウントと販売者の関連付け

        3.1. WeChat 公式アカウントにログインし、販売者アカウントをアプリケーション アカウントに関連付けます

         3.2. 関連する加盟店番号

 「追加」をクリックし、指示に従ってバインドを完了します。

4. appId と販売者番号を取得する

4.1.図に示すように、WeChat 公式アカウント        にログインし、[Basic Configuration] ディレクトリに入り、公式アカウントの appId を取得します。

4.2.図に示すように、   WeChat Pay 販売者アカウント         にログインし、[アカウント センター] -> [アカウント情報] -> [WeChat Pay 販売者 ID] を入力して、WeChat Pay 販売者アカウントを取得します。

5. WeChat マーチャント プラットフォーム にログインし、[アカウント センター > API セキュリティ] ディレクトリに入り、APIV3 キーを設定します。公式ドキュメントがある場合は、ここでは詳細を説明しません。

2. コードスニペット

1.Maven 依存関係を導入する

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

2. バックエンドビジネスリクエストインターフェース

独自のビジネス ニーズに応じて変更して使用します。パラメータは独自のニーズに基づいています。コードは次のとおりです (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. フロントエンドが支払いリクエストメソッドを呼び出します。

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();
}

要約する


上記は、公式ドキュメントに従って実装された WeChat JSAPI 支払いテストです。WeChat コールバック インターフェイスの詳細については説明しません。必要な場合はメッセージを残してください。ご質問がある場合は、議論するためにメッセージを残すことができます。一緒に学びましょう!

おすすめ

転載: blog.csdn.net/m0_57007247/article/details/130083768