C# 專案中【支付寶】介面開發整合案例

龐順龍發表於2019-05-11

.net專案中用於支付寶線上充值案例(即時到賬型別)

1、在官網下載支付寶C#版本demo 下載demo

2、找到其中的c#版本案例 

3、開發站內整合程式碼,支付寶線上充值即時到賬服務,主要流程就是站內提交對接引數到支付寶介面,支付寶自主進行線上支付充值,回撥站內提供的回撥介面,接收支付寶的通知資訊,完成站內的充值業務。

4、程式碼參考


#region 支付寶即時到賬充值請求
Get["/alipayRequest"] = parameters =>
{
    if (Page.AnalystHasLogin || Page.UserHasLogin)
    {
        string alipayTotalFee = ObjectHandlers.Get("alipayTotalFee");
        string rechangeType = ObjectHandlers.Get("rechangeType");

        string alipaySubject = DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo);
        string alipayBody = DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo);

        //支付型別
        string payment_type = "1";

        //伺服器非同步通知頁面路徑,需http://格式的完整路徑,不能加?id=123這類自定義引數
        string notify_url = aplipayURL + "/alipay/alipayNotifyUrl";

        //頁面跳轉同步通知頁面路徑,需http://格式的完整路徑,不能加?id=123這類自定義引數,不能寫成http://localhost/    
        string return_url = aplipayURL + "/alipay/alipayReturnUrl";

        //賣家支付寶帳戶
        string seller_email = alipaySellerEmail;

        //商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
        string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo);

        //訂單名稱
        string subject = alipaySubject;

        //付款金額
        string total_fee = alipayTotalFee;

        //訂單描述        
        string body = alipayBody;

        //商品展示地址,需以http://開頭的完整路徑  
        string show_url = "http://xxxxx/";

        //防釣魚時間戳,若要使用請呼叫類檔案submit中的query_timestamp函式   
        string anti_phishing_key = Submit.Query_timestamp();

        //客戶端的IP地址,非區域網的外網IP地址,如:221.0.0.1
        string exter_invoke_ip = "";

        //把請求引數打包成陣列
        SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
        sParaTemp.Add("partner", zhuge.Alipay.Config.Partner);
        sParaTemp.Add("_input_charset", zhuge.Alipay.Config.Input_charset.ToLower());
        sParaTemp.Add("service", "create_direct_pay_by_user");
        sParaTemp.Add("payment_type", payment_type);
        sParaTemp.Add("notify_url", notify_url);
        sParaTemp.Add("return_url", return_url);
        sParaTemp.Add("seller_email", seller_email);
        sParaTemp.Add("out_trade_no", out_trade_no);
        sParaTemp.Add("subject", subject);
        sParaTemp.Add("total_fee", total_fee);
        sParaTemp.Add("body", body);
        sParaTemp.Add("show_url", show_url);
        sParaTemp.Add("anti_phishing_key", anti_phishing_key);
        sParaTemp.Add("exter_invoke_ip", exter_invoke_ip);

        //建立請求,此方法支付寶demo已經提供,不在此提現了就
        string sHtmlText = Submit.BuildRequest(sParaTemp, "get", "確認");

        //新增充值記錄
        //本站記錄使用者充值記錄,後續支付寶回撥你的站內通知介面

        return sHtmlText;
    }
    else
    {
        return Response.AsRedirect("/ErrorMsg");
    }
};
#endregion

5、上一步會自動提交到支付寶平臺,完成充值後,會呼叫你的回撥地址



//伺服器非同步通知頁面路徑,需http://格式的完整路徑,不能加?id=123這類自定義引數
string notify_url = aplipayURL + "/alipay/alipayNotifyUrl";
6、回撥地址方法程式碼參考



#region 支付寶即時到賬充值 alipayReturnUrl
Get["/alipayReturnUrl"] = parameters =>
{

    SortedDictionary<string, string> sPara = GetRequestGet();

    if (sPara.Count > 0)//判斷是否有帶返回引數
    {
        Notify aliNotify = new Notify();
        bool verifyResult = aliNotify.Verify(sPara, ObjectHandlers.Get("notify_id"), ObjectHandlers.Get("sign"));

        if (verifyResult)//驗證成功
        {
            //商戶訂單號
            string out_trade_no = ObjectHandlers.Get("out_trade_no");

            //支付寶交易號
            string trade_no = ObjectHandlers.Get("trade_no");

            //交易狀態
            string trade_status = ObjectHandlers.Get("trade_status");

            //更新站內訂單中的支付寶訂單資訊
            //此步驟更新4步中記錄中的資訊,當做充值備份

            if (ObjectHandlers.Get("trade_status") == "TRADE_FINISHED" || ObjectHandlers.Get("trade_status") == "TRADE_SUCCESS")
            {
                //更新站內充值訂單狀態為已完成
                //此步驟用於更新4步中的充值記錄狀態
                //更新站內使用者積分即可
            }
            else
            {
                HttpContext.Current.Response.Write("trade_status=" + ObjectHandlers.Get("trade_status"));
            }

        }
        else//驗證失敗
        {
            HttpContext.Current.Response.Write("驗證失敗");
        }
    }
    else
    {
        HttpContext.Current.Response.Write("無返回引數");
    }
    return null;

};
#endregion
7、以上程式碼只做為業務開發的流程參考,程式碼不做開發用,各位看官還是要結合自己的站內業務開發


8、支付寶支援本地除錯,這個很方便,後續會增加網銀介面的實現

龐順龍最後編輯於:4年前

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章