鍍金池/ 問答/Java/ 銀聯(lián)退款回掉驗(yàn)簽失敗的問題?

銀聯(lián)退款回掉驗(yàn)簽失敗的問題?

客戶提了個(gè)銀聯(lián)支付及退款的需求,經(jīng)過讀官方文檔,復(fù)制粘貼官方代碼,支付沒問題了,點(diǎn)擊退款銀聯(lián)也給成功的回答,但是退款后的回掉卻出了問題,研究了一天了,定位到問題所在,但還是束手無策。
我的后臺(tái)采用的是struts2的框架,官方的示例是SpringMVC的代碼,一開始這里也踩坑了,后來我采用
HttpServletRequest req = ServletActionContext.getRequest();
這種方式獲取請求和響應(yīng)。(回掉方法寫在action層里面的)。能跑,但是報(bào)驗(yàn)簽失敗,錢也沒退回來,一路實(shí)驗(yàn)(不停地改代碼放測試服務(wù)器上)定位到了銀聯(lián)官方的某個(gè)SDK文件--CertUtil.java里面的genCertificateByStr方法,
public static X509Certificate genCertificateByStr(String x509CertString) {

    X509Certificate x509Cert = null;
    try {
        CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");
        System.out.println("CertificateFactory:"+cf+"------------------=========");
        InputStream tIn = new ByteArrayInputStream(
                x509CertString.getBytes("ISO-8859-1"));
        System.out.println("tIn:"+tIn+"aaaaaaaaaaaa");
        x509Cert = (X509Certificate) cf.generateCertificate(tIn);
        System.out.println("x509Cert:"+x509Cert+"123456898646");
    } catch (Exception e) {
        LogUtil.writeErrorLog("gen certificate error", e);            
    }
    return x509Cert;
}

經(jīng)過打印輸出,發(fā)現(xiàn)x509Cert為null,一開始前輩們認(rèn)為參數(shù)沒傳進(jìn)去,我打印了看發(fā)現(xiàn)有一對加密的代碼,難道是解密的不對?但是支付和退款也用了該方法,那只能說明我的參數(shù)有問題,可是我很蒙蔽了,參數(shù)怎么改呢???
圖片描述

回答
編輯回答
何蘇葉

同事把回調(diào)接口寫在另一個(gè)項(xiàng)目(springMVC搭建的)里,結(jié)果成功了,我擦,看來真的是struts框架我寫的不對,很氣人


我把我遇到的坑記在我的博客里了,有需要的朋友可以看看,希望大家開發(fā)過程中遇到的坑少一點(diǎn),世界和平!
https://lizhongzhen11.github....

2017年7月19日 12:23