当前位置: 首页 > 科技观察

C#微信支付回调处理

时间:2023-03-11 21:52:00 科技观察

概述在微信支付中,当用户支付成功后,微信会将相关的支付结果和用户信息发送给商户,商户需要接收并处理,并返回响应。接收微信支付异步通知的回调地址也有要求:通知url必须是可直接访问的url,不能带参数。例子:notify_url:"https://pay.weixin.qq.com/wxpay/pay.action"是微信支付开发的,一般通知支付结果的介绍页面→https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3。说明:支付完成后,微信会将相关支付结果和用户信息发送给商户,商户需要接收并处理并返回响应。c#方法微信支付完成后,会有支付回调页面处理支付完成后的事件。V3支付回调的数据格式为XML格式。1.定义一个模型类来处理解析XML对象的通用构造函数;#regionWeiXinAPP//Log.Info(this.GetType().ToString(),"Nativepaymode2urlisproducing...");WxPayDatadata=newWxPayData();//data.SetValue("attach",model.Dowhere);//附加数据data.SetValue("body",model.Title);//商品描述data.SetValue("out_trade_no",model.LocalTransationNo);//WxPayApi.GenerateOutTradeNo());//随机字符串data.SetValue("total_fee",Convert.ToInt32(model.Amount*100));//总量data.SetValue("time_start",DateTime.Now.ToString("yyyyMMddHHmmss"));//交易开始时间data.SetValue("time_expire",DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间//data.SetValue("goods_tag","goods_tag");//商品标签data.SetValue("trade_type","APP");//交易类型//data.SetValue("product_id",model.ProductId);//商品IDWxPayDatar=WxPayApi.UnifiedOrder(data);//调用统一下单接口stringprepay_id=r.GetValue("prepay_id").ToString();WxPayDatada2=newWxPayData();da2.SetValue("appid",WxPayConfig.APPID);//公众账号IDda2.SetValue("noncestr",WxPayApi.GenerateNonceStr());//商户IDda2.SetValue("package","Sign=WXPay");//商品描述da2.SetValue("partnerid",WxPayConfig.MCHID);//WxPayApi.GenerateOutTradeNo());//随机字符串da2.SetValue("prepayid",prepay_id);//总金额da2.SetValue("timestamp",WxPayApi.GenerateTimeStamp());//交易开始时间#endregion2,检查支付结果中是否存在transaction_id//https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7WxPayDatanotifyData=(newCom.WeiXin.Notify(this.HttpContext)).GetNotifyData();//检查支付结果中是否存在transaction_idif(!notifyData.IsSet("transaction_id")){//如果transaction_id不存在,立即返回结果给微信支付后台WxPayDatares=newWxPayData();res.SetValue("return_code","FAIL");res.SetValue("return_msg","微信订单号支付结果中不存在");Log.Error(this.GetType().ToString(),"ThePayresultiserror:"+res.ToXml());HttpContext.Response.Write(res.ToXml());HttpContext.Response.End();}stringtransaction_id=notifyData.GetValue("transaction_id").ToString();3.查询订单并判断订单真伪//查询订单并判断订单真伪if(!QueryOrder(transaction_id)){//如果订单查询失败,则返回结果给微信支付后台WxPayDatares=newWxPayData();res.SetValue("return_code","FAIL");res.SetValue("return_msg","订单查询失败");Log.Error(this.GetType().ToString(),"Orderqueryfailure:"+res.ToXml());HttpContext.Response.Write(res.ToXml());HttpContext.Response.End();}//查询订单成功else{WxPayDatares=newWxPayData();res.SetValue("return_code","SUCCESS");res.SetValue("return_msg","OK");Log.Info(this.GetType().ToString(),"orderquerysuccess:"+res.ToXml());stringtrade_no=transaction_id;stringorder_no=notifyData.GetValue("out_trade_no").ToString();//获取订单号stringtotal_fee=(Convert.ToInt32(notifyData.GetValue("total_fee").ToString())/100.0).ToString();//获取总金额//notifyData.GetValue("attach").ToString();HttpContext.Response.Write(res.ToXml());HttpContext.Response.End();PaymentBLLpbll=newPaymentBLL();boolb=pbll.PayCallback(order_no,total_fee,transaction_id);}4.查询订单,业务处理//查询订单GetValue("return_code").ToString()=="SUCCESS"&&res.GetValue("result_code").ToString()=="SUCCESS"){returntrue;}else{returnfalse;}}#endregionUP技控江东儿都才俊君,翻盘未可知——唐都牧447原创内容公众号