当前位置 : 主页 > 网络编程 > net编程 >

net.core 支付宝 APP 支付

来源:互联网 收集:自由互联 发布时间:2023-09-03
前言:支付宝APP支付(两步操作1:唤醒支付宝。2:支付完成回调并返回) 1:要先申请支付宝APP支付的一系列所需参数了 ,这里我就不一一叙述了网上例子很多,不想找的可以直接访


 前言:支付宝APP支付(两步操作1:唤醒支付宝。2:支付完成回调并返回)

1:要先申请支付宝APP支付的一系列所需参数了 ,这里我就不一一叙述了网上例子很多,不想找的可以直接访问我这边找的一个相对完整的链接 ​​支付宝申请接入APP支付教程 - 简书​​

2:需要配置的参数如下 直接在appsettings.json 配置即可

public static class AliPayConfig
{
public static string APP_ID { get; set; }
public static string APP_PRIVATE_KEY { get; set; }
public static string ALIPAY_PUBLIC_KEY { get; set; }
public static string CHARSET { get; set; }
public static string NotifyUrl { get; set; }
}

 net.core 支付宝 APP 支付_json

 3:参数配置好之后,需要的是支付宝唤醒,如下代码即可

/// <summary>
/// 支付宝APP支付唤醒
/// </summary>
/// <param name="query">自己业务所需的参数</param>
/// <returns></returns>
public async Task<MessageModel<string>> AliPay(WeChatPayQuery query)
{
logger.LogInformation("唤醒支付宝" + query.CustomerId);
try
{
string out_trade_no = query.CustomerId + "1" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
AlipayTradeWapPayQuery viewMode = new AlipayTradeWapPayQuery() { };
//生成订单
IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", AliPayConfig.APP_ID, AliPayConfig.APP_PRIVATE_KEY, "json", "1.0", "RSA2", AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.CHARSET, false);
// 实 例 化 具 体 API 对 应 的 request 类 , 类 名 称 和 接 口 名 称 对 应 , 当 前 调 用 接 口 名 称 如 : alipay .trade .app .pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// SDK 已 经 封 装 掉 了 公 共 参 数 , 这 里 只 需 要 传 入 业 务 参 数 。 以 下 方 法 为 sdk 的 model 入 参 方 式 ( model 和 biz_content 同 时 存 在 的 情 况 下 取 biz_content ) 。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.Body = "产品名称";
model.Subject = "产品名称";
model.TotalAmount = query.Money.ToString();
model.ProductCode = "QUICK_MSECURITY_PAY";
model.OutTradeNo = out_trade_no;
model.TimeoutExpress = "30m";
request.SetBizModel(model);
request.SetNotifyUrl(AliPayConfig.NotifyUrl);
// 这 里 和 普 通 的 接 口 调 用 不 同 , 使 用 的 是 sdkExecute
AlipayTradeAppPayResponse response = client.SdkExecute(request);
//Response.Write(HttpUtility.HtmlEncode(response.Body));
// 页 面 输 出 的 response .Body 就 是 orderString 可 以 直 接 给 客 户 端 请 求 , 无 需 再 做 处 理 。
logger.LogInformation("唤醒成功" + out_trade_no);
_unitOfWork.BeginTran();
var order = //业务处理添加订单信息
if (order > 0)
{
logger.LogInformation(out_trade_no + "唤醒成功");
_unitOfWork.CommitTran();
return new MessageModel<string>()
{
success = true,
msg = "获取成功",
response = response.Body
};
}
return new MessageModel<string>() { success = false, msg = "订单添加失败" };
}
catch (Exception ex)
{
_unitOfWork.RollbackTran();
logger.LogInformation("唤醒异常" + ex.ToString());
return new MessageModel<string>() { success = false, msg = "支付宝唤醒失败" };
}
}

 net.core 支付宝 APP 支付_json_02

4:支付宝回调  这里我做了一个简单的接受类,可以更直观的接收到支付宝后台回调传过来的参数

public class AliPayOrderResponse
{
/// <summary>
/// 通知时间
/// </summary>
public string notify_time { get; set; }
/// <summary>
/// 通知的类型
/// </summary>
public string notify_type { get; set; }
/// <summary>
/// 通知校验ID
/// </summary>
public string notify_id { get; set; }
/// <summary>
/// 开发者的app_id
/// </summary>
public string app_id { get; set; }
/// <summary>
/// 编码格式
/// </summary>
public string charset { get; set; }
/// <summary>
/// 接口版本
/// </summary>
public string version { get; set; }
/// <summary>
/// 签名类型
/// </summary>
public string sign_type { get; set; }
/// <summary>
/// 签名
/// </summary>
public string sign { get; set; }
/// <summary>
/// 支付宝交易号
/// </summary>
public string trade_no { get; set; }
/// <summary>
/// 商户订单号
/// </summary>
public string out_trade_no { get; set; }



/// <summary>
/// 商户业务号
/// </summary>
public string out_biz_no { get; set; }
/// <summary>
/// 买家支付宝用户号
/// </summary>
public string buyer_id { get; set; }
/// <summary>
/// 买家支付宝账号
/// </summary>
public string buyer_logon_id { get; set; }
/// <summary>
/// 卖家支付宝用户号
/// </summary>
public string seller_id { get; set; }
/// <summary>
/// 卖家支付宝账号
/// </summary>
public string seller_email { get; set; }
/// <summary>
/// 交易状态
/// </summary>
public string trade_status { get; set; }
/// <summary>
/// 订单金额
/// </summary>
public decimal total_amount { get; set; }
/// <summary>
/// 实收金额
/// </summary>
public decimal receipt_amount { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal buyer_pay_amount { get; set; }
/// <summary>
/// 标题
/// </summary>
public string subject { get; set; }
/// <summary>
/// 描述
/// </summary>
public string body { get; set; }
/// <summary>
/// 交易创建时间
/// </summary>
public string gmt_create { get; set; }
/// <summary>
/// 交易付款时间
/// </summary>
public string gmt_payment { get; set; }

/// <summary>
/// 交易结束时间
/// </summary>
public string gmt_close { get; set; }
}

 net.core 支付宝 APP 支付_支付_03

5:回调方法

/// <summary>
/// 支付宝订单回调
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> UnderAliPay([FromForm] AliPayOrderResponse query)
{
logger.LogInformation("开始回调(支付宝)");
try
{
var out_trade_no = query.out_trade_no;
//成功
var result = (await _dal.Query(x => x.out_trade_no == out_trade_no && x.PayType == EnumPayType.AliPay)).FirstOrDefault();
if (result == null)
{
logger.LogInformation("Failure支付结果中(支付宝)订单号不存在" + out_trade_no);
return Content("fail");
}
if (result != null && result.Status == EnumOrderType.payoff)
{
logger.LogInformation("SUCCESS(支付宝已经成功):" + out_trade_no);
return Content("success");
}
if (query.trade_status.Trim() == "TRADE_SUCCESS")
{

var payresult = //这里是业务处理,回调成功后,所进行的数据修改的操作
if (payresult.success == true)
{
logger.LogInformation("SUCCESS(支付宝):" + out_trade_no);
return Content("success");
}
else
{
logger.LogInformation("fail(支付宝)成功后方法有误:" + out_trade_no);
return Content("fail");
}
}
}
catch (Exception ex)
{
logger.LogInformation("fail(支付宝)" + ex.ToString());
return Content("fail");
}
return Content("fail");
}

 net.core 支付宝 APP 支付_json_04

注:若有疑问可留言,文章不定期更新


上一篇:『 再看.NET7』让json序列化体现多态
下一篇:没有了
网友评论