1. 程式人生 > >如何使用支付寶進行付款和退款

如何使用支付寶進行付款和退款

注意:在寫程式碼之前記得新增支付寶示例demo裡面的AopSdk.dll檔案到專案裡,並且在專案裡引用它

using AlipayDemo;
using Aop.Api;
using Aop.Api.Domain;
using Aop.Api.Request;
using Aop.Api.Response;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;

namespace WebApplication1.Controllers
{
    public class AlipayController : Controller
    {
        // GET: Alipay
        public ActionResult Index()
        {
            return View();
        }
        /// <summary>
        /// 付款
        /// </summary>
        /// <param name="coll">表單集合</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Index(FormCollection coll)
        {
            double totalAmount = Convert.ToDouble(coll["TotalAmount"]);
            //例項化預設的DefaultAopClient
            DefaultAopClient aop = new DefaultAopClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.private_key, "json", "1.0", AlipayConfig.sign_type, AlipayConfig.public_key, AlipayConfig.charset);//AlipayConfig.charset可寫可不寫,預設為UTF-8
            // 組裝業務引數model
            AlipayTradePagePayModel model = new AlipayTradePagePayModel();
            //商品描述
            model.Body = "喜歡小花花";
            //訂單名稱
            model.Subject = "小花花是女孩子";
            //轉賬金額(精確到小數點兩位)
            model.TotalAmount = totalAmount.ToString();
            //商品唯一編號(訂單號)
            model.OutTradeNo = Guid.NewGuid().ToString().Replace("-", "").ToLower();
            //支付型別(電腦網站支付的型別)
            model.ProductCode = "FAST_INSTANT_TRADE_PAY";

            //支付寶請求
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            // 設定非同步通知接收地址   支付成功後的跳轉頁面
            request.SetNotifyUrl("http://localhost:57812/Alipay/Success");
            //封裝支付寶模型到請求物件中
            request.SetBizModel(model);
            //設定同步回撥地址
            request.SetReturnUrl("");

            // 將業務model載入到request 支付寶響應
            AlipayTradePagePayResponse response = null;
            response = aop.pageExecute(request, null, "post");
       
            Response.Write(response.Body);
            return View();
        }


        public ActionResult Success()
        {
            return View();
        }
        /// <summary>
        /// 退款
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Refund(FormCollection coll)
        {
            DefaultAopClient aop = new DefaultAopClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.private_key, "json", "1.0", AlipayConfig.sign_type, AlipayConfig.public_key, AlipayConfig.charset);//AlipayConfig.charset可寫可不寫,預設為UTF-8
            AlipayTradeRefundModel model = new AlipayTradeRefundModel();

            //訂單支付時傳入的商戶訂單號,不能和 trade_no同時為空。
            model.OutTradeNo = coll["OutTradeNo"];
            // 支付寶交易號,和商戶訂單號不能同時為空   訂單號
            model.TradeNo = coll["TradeNo"];
            //需要退款的金額,該金額不能大於訂單金額,單位為元,支援兩位小數
            model.RefundAmount = coll["RefundAmount"];
            //	退款的原因說明(可選)
            model.RefundReason = coll["RefundReason"];
            // 退款單號,同一筆多次退款需要保證唯一,部分退款該引數必填。
            model.OutRequestNo = "";

            //支付寶請求
            AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
            request.SetBizModel(model);

            AlipayTradeRefundResponse response = aop.Execute(request);
            //  Response.Write(response.Body);
            if (response.Msg == "Success" && response.Code == "10000")
            {
                Response.Write("<h2>退款成功</h2>");
            }
            else
            {
                Response.Write("<h2>退款失敗</h2>");
            }

            return View();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AlipayDemo
{
    public class AlipayConfig
    {
        /// <summary>
        /// 應用id,我的appid
        /// </summary>
        public static string app_id = "";
        /// <summary>
        /// 支付寶閘道器
        /// </summary>
        public static string gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
        /// <summary>
        ///  商戶私鑰,您的原始格式RSA私鑰
        /// </summary>
        public static string private_key = "";

        /// <summary>
        /// 支付寶公鑰,檢視地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。、
        /// </summary>
        public static string public_key = "";
        /// <summary>
        /// 簽名方式
        /// </summary>
        public static string sign_type = "RSA2";
        /// <summary>
        /// 編碼格式
        /// </summary>
        public static string charset = "utf-8";

    }
}

@{
    ViewBag.Title = "Index";
}
    <form method="post">
        <input type="text" name="TotalAmount" />
        <input type="submit" value="付款" />
    </form>




@{
    ViewBag.Title = "Success";
}
<div>
    <h1>支付成功!</h1>
</div>
<div class="clearfix"></div>
<form method="post" action="/Alipay/Refund">
    商戶號:<input type="text" name="OutTradeNo"  /><br /><br />
    訂單號:<input type="text" name="TradeNo"  /><br /><br />
    總金額:<input type="text" name="RefundAmount"  /><br /><br />
    退款原因: <textarea name="RefundReason"></textarea><br /><br />
    <input type="submit" value="退款" />
</form>