demoshop

demo, trying to be the best_

近期內接了不少的金流【歐付寶】【綠界】【TapPay】【智付通】被搞的嫑嫑的,雖然這篇主要是要來說智付通的心路歷程,但我還是想來評論一下以上四種金流對於 .NET 開發人員的友善度,滿分是五顆星。

  • 【歐付寶】
  • 【綠 界】
  • 【TapPay】
  • 【智付通】

以上的友善度為個人觀感,串接的時間點為 2017-03 ~ 2017-06 之間,不代表往後的友善度。

智付通的資料傳遞是這樣設計的(我接的版本為 V1.4 )

  • 將傳遞的資料使用 Query 的方式組合,如 key1=val1&key2=val2&key3=val3
  • 使用智付通提供的 KEY 與 VI 對 Query 字串使用 AES 演算法加密
  • 將 AES 字串使用 SHA256 做不可逆雜湊

以上為大致的做法雙向都是使用一樣的雜湊加密法(雷也都在裡面)

再我撞的亂七八糟後我通知了當初的窗口和她說


demo:「你們的文件和範例對於 .NET 開發人員實在太虐心了」
窗口:「怎麼說?」
demo:「範例沒有 C# 就算了,文字的描述漏東漏西,我最後是去查 PHP 文件後才看懂你們文件漏了什麼」
窗口:「哪部分漏了?」
demo:「多到我不知道怎麼說,不過我決定要把我寫的部分 Open Source 出來,不然這樣的文件我不知道要怎麼和我周圍寫 .NET 的朋友推薦…」

 

於是呢我接好以後就把它放上 GitHub 了,不過因為 demo 寫的都是只有自己會用的部分,不好意思稱呼為 SDK ,所以這是一個小幫手(Helper)

 

整個專案是由兩個 Helper 組合而成

  • CryptoHelper.cs
    • 主要的加解密與雜湊都在這裡
  • MyHelper.cs
    • 大無畏的類別,不屬於上面的都丟這(看不爽歡迎發 PR)

使用的方式也不難

public ActionResult Index()
    {
        var tradeInfo = new TradeInfo()
        {
            MerchantID = "MS12345678",
            RespondType = "JSON",
            TimeStamp = DateTime.Now.ToUnixTimeStamp(),
            Version = "1.4",
            Amt = 100,
            ItemDesc = "TTEESSTT",
            //InstFlag="3,6",
            //CreditRed = 0,
            Email = "demo@demo.demo",
            EmailModify = 0,
            LoginType = 0,
            MerchantOrderNo = DateTime.Now.Ticks.ToString(),
            TradeLimit = 180,
            //CVS=1,
            //ExpireDate=DateTime.Now.ToString("yyyyMMdd"),
            ReturnURL = "http://localhost:51639/home/index",
        };
        var postData = tradeInfo.ToDictionary();
        var cryptoHelper = new CryptoHelper(_key, _Vi);
        var aesString = cryptoHelper.GetAesString(postData);
        ViewData["TradeInfo"] = aesString;
        ViewData["TradeSha"] = cryptoHelper.GetSha256String(aesString);
        return PartialView();
    }

 

該專案提供了 TradeInfo 物件,此物件是參考智付通文件建立的,內含所有可以傳遞的欄位,不過有些欄位的互斥條件並沒有處理,請使用者建立物件的時候自行處理,也因為要組成 QueryString 所以設計了一個方法可以把物件轉 Dictionary 這樣就可以很簡單的使用 LINQ 處理(偷雞到極致)。

再來建立 CryptoHelper 物件,並且使用建構子的方式把智付通提供的 Key , VI 傳入,就可以使用 GetAesString() 與 GetSha256String() 兩個方法得到需要的字串啦,有沒有超簡單?

交易結束後取得智付通的回傳也不難

 

[HttpPost]
    public ActionResult Index(SpGatewayResponse response)
    {
        response.Key = _key;
        response.Vi = _Vi;
        var success = response.Validate("MS12345678");
        if (success)
        {
            var tradInfoModel=response.GetResponseModel<TradeInfoModel>();
        }
        return View();
    }

 

該專案設計了一個 SpGatewayResponse 物件,接到後請給 Key & VI 兩個屬性正確的值,這樣才可以正確驗證與還原,再來呼叫 Validate("商店編號") 方法可以檢查回傳的字串是否正確,確定回傳字串正確以後就可以使用 GetResponseModel<T>() 當然這個 T 你可以用專案提供的,也可以自己設計,畢竟我都用泛型了你爽就好。

基本上就是這樣,傳出去和接回來的部分都已經處理掉了,您只需處理自己系統的串接部分,應該可以大幅的減少串接金流所花費的時間,如果專案有任何不滿意不開心不喜歡不實用的部分,歡迎發 PR 阿。

 

 

demofan/SPGateway

 

 

回應討論