net.core 支付宝APP支付

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

1:要先申请支付宝APP支付的一系列所需参数了 ,这里我就不一一叙述了网上例子很多,不想找的可以直接访问我这边找的一个相对完整的链接 https://www.jianshu.com/p/726970f7467d

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; }
    }

 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 = "支付宝唤醒失败" };
            }
        }

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; }
    }

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");
        }

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的黄金鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值