支付宝:当面付支付完成异步回调


Demo参考:当面付 DEMO - 支付宝开放平台 (alipay.com)

下载地址: https://gw.alipayobjects.com/os/bmw-prod/fe70c2d4-7ee9-410f-9a01-2617a9be392f.zip

 

代码:

C# 全选
[RoutePrefix("api/PayNotify")]
public class PayNotifyController : AliAdminTool.WebApi.ControllerBase.ControllerBase
{
    [HttpPost]
    public IHttpActionResult AliPayNotify()
    {
        SortedDictionary<string, string> sPara = GetRequestPost();

        if (sPara.Count > 0)//判断是否有带返回参数
        {
            //Notify aliNotify = new Notify();
            Notify aliNotify = new Notify(HttpContext.Current.Request.Form["charset"], HttpContext.Current.Request.Form["sign_type"], ConfigData.Intance.AliPaySetting.alipay_appID, "https://mapi.alipay.com/gateway.do", ConfigData.Intance.AliPaySetting.alipay_public_key);

            //对异步通知进行验签
            bool verifyResult = aliNotify.Verify(sPara, HttpContext.Current.Request.Form["notify_id"], HttpContext.Current.Request.Form["sign"]);
            //对验签结果
            //bool isSign = Aop.Api.Util.AlipaySignature.RSACheckV2(sPara, Config.alipay_public_key ,Config.charset,Config.sign_type,false );


            if (verifyResult) //验签成功 && 关键业务参数校验成功
            {
                ////商户订单号
                string out_trade_no = sPara["out_trade_no"];


                Req_QueryOrder req_data = new Req_QueryOrder()
                {
                    OrderID = out_trade_no
                };
                ModelRequestAction requestAction = new ModelRequestAction()
                {
                    Data = Newtonsoft.Json.JsonConvert.SerializeObject(req_data)
                };
                BLLPay bllPay = new BLLPay(requestAction);
                var obj = bllPay.QueryOrderBase();
                if (obj.IsPay == false)
                {
                    string body2 = Newtonsoft.Json.JsonConvert.SerializeObject(sPara);
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("Headers:");
                    sb.AppendLine("\t" + Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers));
                    sb.AppendLine("Body:");
                    sb.AppendLine("\t" + body2);
                    sb.AppendLine("回调成功!但是业务处理失败,返回状态还是支付失败!");
                    Logs.Error("签名失败!", null, sb.ToString());
                }

                return Ok();
            }
            else//验证失败
            {
                // 记录日志
                string body2 = Newtonsoft.Json.JsonConvert.SerializeObject(sPara);
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("收到支付宝回调:" + Request.RequestUri.ToString());
                sb.AppendLine("Headers:");
                sb.AppendLine("\t" + Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers));
                sb.AppendLine("Body2:");
                sb.AppendLine("\t" + body2);
                sb.AppendLine("验签结果:" + verifyResult);

                Logs.Info(sb.ToString());
                return BadRequest();
            }


        }
        else
        {
            //Response.Write("无通知参数");
            return Ok();
        }
    }

    /// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
    /// </summary>
    /// <returns>request回来的信息组成的数组</returns>
    public SortedDictionary<string, string> GetRequestPost()
    {
        int i = 0;
        SortedDictionary<string, string> sArray = new SortedDictionary<string, string>();
        NameValueCollection coll;
        //Load Form variables into NameValueCollection variable.
        coll = HttpContext.Current.Request.Form;
        // Get names of all forms into a string array.
        String[] requestItem = coll.AllKeys;

        for (i = 0; i < requestItem.Length; i++)
        {

            sArray.Add(requestItem[i], HttpContext.Current.Request.Form[requestItem[i]]);
        }

        return sArray;
    }
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
评论列表

发表评论

评论内容
昵称:
关联文章

支付当面支付完成异步
支付当面支付完成异步
支付支付对接,当面,根据金额生成付款二维码
微信支付,当面,开发手册
Asp.net 微信H5唤起支付支付
支付:联排查工具使用介绍
支付:H5 JSAPI支付开发手册
微信支付支付成功没有通知Notify_URL
微信/支付 在线支付测试工具
微信支付: API V3支付签名验证
支付支付报错:4004,卖家不在设置的收款账户列表之中
支付[当面]收款码生成以及付款状态轮询
微信支付当面 开发手册
支付支付报错:40003,三方应用未绑定服务商账号
支付获取用户信息时,提示 对不起,访问出错了 E004:AUTH_REDIRECT_URL_NOT_IN_WHITE
Task 使用详细[基础操作,异步原则,异步函数,异步模式]
.net异步Task转同步
微信支付: API V3支付签名验证
Javascript 中通过 yield 和 promise 使异步变同步
支付支付对接