2019年1月22日 星期二

[C#] 智付通SPGateway(藍新)金流串接

[C#] 智付通SPGateway(藍新)金流串接.md

簡介

最近在用C#串接智付通spgateway(藍新)金流,文件主要以php sample code為主,C#部分的內容說明的比較不是這麼詳細,所以串接上遇到了一些問題,藉此來稍微紀錄一下,讓有遇到相同問題的人也能順利通過。(文章最後有提供C#測試的Sample Code)

整理(mpg串接版本1.5)

  • 串接的時候會要求網址Port為80或443,可使用ngrok來幫忙轉址,讓我們在VS Debug測試的時候也能使用。
  • ReturnURL (即時交易)參數未給值,會導到智付通預設畫面
  • CustomerURL (非即時交易)參數未給值,會將取號結果導到智付通預設畫面
  • NotifyURL 即時交易結果或非即時交易繳費成功後,都會由此網址回傳
  • TradeInfo (交易資料 AES 加密)參數要將交易資料參數轉成像Query String的方式(ex: key1=Value1&key2=Value2&key3=Value3…),再進行AES 加密
    • 以下是我的作法
        // 將model 轉換為List<KeyValuePair<string, string>>, null值不轉
        List<KeyValuePair<string, string>> tradeData = LambdaUtil.ModelToKeyValuePairList<TradeInfo>(tradeInfo);
        // 將List<KeyValuePair<string, string>> 轉換為 key1=Value1&key2=Value2&key3=Value3...
        var tradeQueryPara = string.Join("&", tradeData.Select(x => $"{x.Key}={x.Value}"));
        // AES 加密
        var tradeInfo = CryptoUtil.EncryptAESHex(tradeQueryPara, hashKey, hashIV);
      
  • TradeSha (交易資料SHA256 加密) 範例如下
    // SHA256 加密
    var tradeSha = CryptoUtil.EncryptSHA256($"HashKey={hashKey}&{tradeInfo}&HashIV={hashIV}");
    

Sample Code

GitLab - 智付通SPGateway(藍新)金流串接Sample Code



參考資料

藍新金流平台
藍新金流平台 API文件


如有錯誤或建議,歡迎留言指教,謝謝!!
(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)

4 則留言:

  1. 寫錯了唷,不是CustomerURL,是ReturnURL
    ReturnURL參數未給值,會導到智付通預設畫面

    回覆刪除
    回覆
    1. 感謝提醒,我再修改清楚一點,CustomerURL主要是"非即時交易"使用的。

      刪除
  2. 可否請問 在NotifyURL裡面 ,要如何接收 金流方 回傳回來的資料呢? 我看文件 好像對方 是用post 的方式,那在NotifyURL裡面 是要用 post 收接資料的方式對嗎?
    如果 RespondType 是String 是否 就直接 接收 例如 Status 、Message 的參數 就可以呢?

    謝謝您

    回覆刪除
    回覆
    1. 在MPG參數設定時記得設定你的NotifyURL(不能是localhost,不然會接收不到,你可以搭配下一篇說明的ngrok解決localhost問題);至於接收Post可以參考Gitlab的範例程式。

      不管RespondType是String 或JSON都無法"直接"接收到Message參數,因為他回傳的參數為Status、MerchantID、TradeInfo、TradeSha,而Message等參數需要靠TradeInfo AES 解密取得。

      希望以上能幫助到你,謝謝。

      刪除