【ASP.NET】Ebill 金流串接 全國繳費網 簡單範例

問題

前一陣子幫同事接的小案子,主要說明檔很不清楚他們如何串接,因此寫了這篇,會講解接收與傳送的方法。

Ebill接收方法

用一般頁面繼承IHttpHandler,主要能拿到FromStream就可以了,是Base64編碼,接到值請自行處理。對了,Webconfig也要新增handlers項目。範例建立一個query.aspx頁面。

Web.config

  <system.webServer>
    <handlers>
      <add name="QueryHandler" verb="*" path="query.aspx" type="ebill.Query"/>
    </handlers>
  </system.webServer>

接收與傳送資料(query.aspx.cs)

public class Query : IHttpHandler
    {
        void IHttpHandler.ProcessRequest(HttpContext context)
        {
            try
            {
                string ReceivedData = GetFromInputStream(context);
                                context.Response.Clear();
                
                if (!string.IsNullOrEmpty(ReceivedData))
                {
                    // ReceivedData可以用Base64解密後進行資料處理,在Ebill叫8010、8020等
                    // Ebill會回來抓你Write值
                    context.Response.Write(ReceivedData);
                }
            }
            catch (Exception ex)
            {
                context.Response.Write(ex.Message);
            }
        }

        bool IHttpHandler.IsReusable
        {
            get { return true; }
        }

        private static string GetFromInputStream(HttpContext context)
        {
            var reader = new StreamReader(context.Request.InputStream);

            return reader.ReadToEnd();
        }
    }

Base64加解密

    /// <summary>
    /// Base64 編碼
    /// </summary>
    /// <param name="plainText">字串</param>
    /// <returns></returns>
    public static string Base64Encode(string plainText)
    {
        var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
        return Convert.ToBase64String(plainTextBytes);
    }

    /// <summary>
    /// Base64 解碼
    /// </summary>
    /// <param name="base64EncodedData">資料</param>
    /// <returns></returns>
    public static string Base64Decode(string base64EncodedData)
    {
        var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
        return Encoding.UTF8.GetString(base64EncodedBytes);
    }

結論

只探討傳送或接收的方法,資料接收到後照規格傳送資料,剩下就不難囉 : )