版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunshineBlog/article/details/83352329
注意:在写代码之前记得添加支付宝示例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>