支付宝支払Javaバックグラウンドまとめ

4240 ワード

この支払いの流れは、フロントエンドH 5(APPなど)が支払う必要があるときにバックグラウンドのインタフェースを呼び出し、私たちが暗号化した署名を持って支付宝の支払いインタフェース(支付宝APP)を呼び出して支払い操作を行い、フロントエンドが支払いに成功した後、支付宝のバックグラウンドは署名時に書いたインタフェースのアドレスを返して支払い結果の非同期通知を行う.

事前準備

  • 1、作成中に使用された変数には、主に秘密鍵、公開鍵、およびあなたのAPPID(H 5支払いは必要ありません)があります.これらはアリの金服に登録してから手に入れたものです.
  • 2、使用したjarパッケージ:
  • alipay-sdk-java*.JAr—————————支付宝SDKコンパイルファイルjar
  • alipay-sdk-java*-source.JAr——————支付宝SDKソースファイルjar
  • commons-logging-1.1.1.JAr——————SDK依存ログjar
  • commons-logging-1.1.1-sources.JAr———SDK依存のログソースjar支付宝のSDKのjarパッケージはmaven repositoryに登録されていないので、自分で公式サイトでjarパッケージをダウンロードしてmaven倉庫に打ち込む必要があります.書くのがおっくうな学生はここをクリックして直接ダウンロードすることができます.


  • コード#コード#


    署名を取得するインタフェース
    @ResponseBody
    @RequestMapping(value="/alipaySign",method=RequestMethod.POST)
    public JSONObject signprams(Double totalAmount,String userId,String out_trade_no){
        String subject = "Your Subject";        //  
        String body = "Your Body";              //    
        String CHARSET = "utf-8";
    
        /**
         *       
         */
        AlipayClient alipayClient = new DefaultAlipayClient
        (PayConstants.Ali_Open_Api_Domain,PayConstants.Ali_AppId,
            PayConstants.ALI_PRIVATE_KEY,"json",CHARSET,PayConstants.ALI_PUBLIC_KEY,"RSA2");
        //     API   request ,          
        AlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();
        //sdk  model  
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setPassbackParams(body);      //    ,      
        model.setSubject(subject);          //    
        model.setOutTradeNo(out_trade_no);  //   
        model.setTimeoutExpress("30m");     //         
        model.setTotalAmount(Double.toString(totalAmount));     // double     String 
        model.setProductCode(PayConstants.Ali_ProductCode);
        alirequest.setBizModel(model);
        alirequest.setNotifyUrl(PayConstants.Ali_Notify_Url);   //    
    
        String orderStr = "";
        try {
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(alirequest);
            orderStr = response.getBody();
        } catch (AlipayApiException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        String sign = DigestUtils.md5Hex(out_trade_no).toUpperCase();
    
        /////////////////        /////////////////////////
    
        JSONObject resObj = new JSONObject();
        resObj.put("code", "SUCCESS");
        resObj.put("out_trade_no", out_trade_no);
        resObj.put("sign", sign);
        resObj.put("orderStr",orderStr);
        System.out.println(resObj.toJSONString());
        System.out.println(resObj.toString());
        return resObj;
    }
    

    コールバックのインタフェースコールバックのアドレスは必ず外部ネットワークのアドレスであることを保証しなければならない.内部ネットワーク開発のアドレスはファイアウォールの制限のため必ずしもアクセスできない.
    @ResponseBody
    @RequestMapping(value="/alipayNotify",method=RequestMethod.POST)
    public String getNotify(HttpServletRequest request){
        Map requestParams = request.getParameterMap();
        logger.info("         :"+requestParams.toString());
        //     POST      
        Map params = new HashMap();
    
        for(Iterator iter=requestParams.keySet().iterator();iter.hasNext();){
            String name = (String)iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr= "";
            for(int i=0;i < values.length;i++){
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
                logger.info(valueStr);
                //    ,            。
                //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
                params.put(name, valueStr);
            }
        }
    
        ///////////////////       //////////////////////
    
        try {
            boolean flag = AlipaySignature.rsaCheckV1
            (params, PayConstants.ALI_PUBLIC_KEY, "UTF-8", "RSA2");
            if(flag){
                if("TRADE_SUCCESS".equals(params.get("trade_status")))
    
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return "SUCCESS";
    }