.net服務端接入支付寶接口


創建沙箱測試賬號及引入支付寶相應語言的SDK,支付寶開放平台有詳細介紹,這里就不做贅述了。

主要代碼如下:

創建支付配置類

public class AlipayConfig
    {
        //APPID
        public static string appId = "";
        //支付寶網關
        public static string gateway = "https://openapi.alipaydev.com/gateway.do";
        //用戶私鑰
        public static string privateKey = "";
        //支付寶公鑰
        public static string alipayPublicKey = "";
        //支付成功的回調地址
        public static string returnURL = "";
        // 簽名方式  
        public static string sign_type = "RSA2";
        // 編碼格式  
        public static string charset = "UTF-8";

        private static string generateOrderNumber()
        {
            return DateTime.Now.ToString("yyyyMMddHHmmssfff");
        }

        /*
         * 創建支付model
         * price:商品價格
         * title:商品標題
         * description:商品描述
         * **/
        public static AlipayTradePagePayModel creatModel(string price, string title, string description)
        {
            AlipayTradePagePayModel model = new AlipayTradePagePayModel();
            model.Body = description;
            model.Subject = title;
            //付款金額
            model.TotalAmount = price;
            //商戶網站中唯一訂單號
            model.OutTradeNo = generateOrderNumber();
            model.ProductCode = "FAST_INSTANT_TRADE_PAY";
            return model;
        }

    }

Controller層主要接口:

用戶點擊支付后的跳轉接口

public string Index()
        {
            DefaultAopClient client = new DefaultAopClient(AlipayConfig.gateway, AlipayConfig.appId, AlipayConfig.privateKey, "json", "1.0", AlipayConfig.sign_type, AlipayConfig.alipayPublicKey, AlipayConfig.charset, false);
            //金額格式必須是小數點后兩位數或是正整數且不是金額格式(即$123.00),以及非常重要的一個原則,傳遞的參數要么不傳遞這個參數(即傳遞的眾多參數中,這個參數完全不存在
            AlipayTradePagePayModel model = AlipayConfig.creatModel("9.90","測試商品","測試商品支付");
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            //支付成功的回調地址
            request.SetReturnUrl("xxxxxxxxxx");
            // 設置異步通知接收地址,需要公網能夠訪問
            request.SetNotifyUrl("xxxxxxxxxx");
            // 將業務model載入到request
            request.SetBizModel(model);

            AlipayTradePagePayResponse response = null;
            try
            {
                response = client.pageExecute(request);
                return response.Body;
            }
            catch (Exception exp)
            {
                throw exp;
            }

        }

在此過程中支付寶會返回給我們一個表單數據,此表單不需要我們做任何操作,自動提交

同步回調地址為通知用戶付款操作后自定義的跳轉頁面,異步回調地址為支付寶通知后台用戶付款操作的結果;具體操作結果以異步通知結果為准。

異步回調接口:

public void notify()
        {
            Dictionary<string, string> sArray = GetRequestPost();
            if(sArray.Count > 0){
                

                //調用SDK驗簽方法
                bool signVerified = AlipaySignature.RSACheckV1(sArray, AlipayConfig.alipayPublicKey, AlipayConfig.charset);
                //此判斷結果中書寫業務邏輯代碼
                if (signVerified)   //驗證支付發過來的消息,簽名是否正確
                {
                    //商戶訂單號
                    string out_trade_no = Request.Form["out_trade_no"];

                    //支付寶交易號
                    string trade_no = Request.Form["trade_no"];

                    //交易狀態
                    string trade_status = Request.Form["trade_status"];


                    if (Request.Form["trade_status"] == "TRADE_FINISHED")
                    {
                        //判斷該筆訂單是否在商戶網站中已經做過處理
                        //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
                        //如果有做過處理,不執行商戶的業務程序

                        //注意:
                        //退款日期超過可退款期限后(如三個月可退款),支付寶系統發送該交易狀態通知
                    }
                    else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {
                        //判斷該筆訂單是否在商戶網站中已經做過處理
                        //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
                        //如果有做過處理,不執行商戶的業務程序

                        //注意:
                        //付款完成后,支付寶系統發送該交易狀態通知
                        
                        //請在這里加上商戶的業務邏輯程序代碼

                    }
                    else
                    {
                    }
                    Response.Write("success");     //返回給支付寶消息,成功,這里不要動!!!
                }
                else
                {
                    Response.Write("fail");
                }
            }

        }

        public Dictionary<string, string> GetRequestPost()
        {
            int i = 0;
            Dictionary<string, string> sArray = new Dictionary<string, string>();
            NameValueCollection coll;
            coll = Request.Form;
            String[] requestItem = coll.AllKeys;
            for (i = 0; i < requestItem.Length; i++)
            {
                sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
            }
            return sArray;

        }

至此,支付接口調用完成。

支付寶對於接口調用 的文檔說明還是比較清晰詳細的,仔細去閱讀以下文檔,思路還是較為清晰的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM