当前位置: 首页 > news >正文

海外网站开发网站打开慢怎么回事

海外网站开发,网站打开慢怎么回事,网站开发app定制,怎么样做跨境电商点击上方“dotNET名人堂”#xff0c;选择“设为星标”用学习的姿态#xff0c;步入工作的状态继上一篇.NET Core 微信小程序支付——#xff08;统一下单#xff09;后#xff0c;本文将实现统一退款功能#xff0c;能支付就应该能退款嘛#xff0c;一般涉… 点击上方“dotNET名人堂”选择“设为星标”用学习的姿态步入工作的状态继上一篇.NET Core 微信小程序支付——统一下单后本文将实现统一退款功能能支付就应该能退款嘛一般涉及到钱的东西都会比较敏感所以在设计退款流程时一定要严谨不能出一点差错否则你将会面临自己掏腰包的可能下面我们来讲一讲退款的实现步骤。目录1、退款应该场景及规则2、实现统一退款流程3、退款统一回调处理4、总结1退款应该场景及规则当交易发生之后一段时间内由于买家或者卖家的原因需要退款时卖家可以通过退款接口将支付款退还给买家微信支付将在收到退款请求并且验证成功之后按照退款规则将支付款按原路退到买家帐号上。规则1、交易时间超过一年的订单无法提交退款2、微信支付退款支持单笔交易分多次退款多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交请不要更换退款单号请使用原商户退款单号。 3、请求频率限制150qps即每秒钟正常的申请退款请求次数不超过150次     错误或无效请求频率限制6qps即每秒钟异常或错误的退款申请请求不超过6次 4、每个支付订单的部分退款次数不能超过50次接口地址接口链接https://api.mch.weixin.qq.com/secapi/pay/refund相关参数官方退款文档文档地址https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter9_4index62实现统一退款流程如果业务有多处退款流程可以将退款流程进行封装方便多位置调用如果公司有同主体下的不同小程序都需要退款功能也是可以进行封装针对不同的小程序进行退款。去商户后台先下载证书退款时需要下图是商户后台下载证书的界面引用包Senparc.Weixin.WxOpenSenparc.Weixin.TenPay注册公众号小程序信息services.AddSenparcGlobalServices(Configuration) .AddSenparcWeixinServices(Configuration);IRegisterService register RegisterService.Start(env, senparcSetting.Value).UseSenparcGlobal(false, null); register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value) .RegisterTenpayV3(senparcWeixinSetting.Value, appid);统一退款代码实现publicbool RefundProduct(OrdOrderProduct ordOrderProduct, PayOrderMstParam payOrderMstParam, OrdOrderPayItem ordOrderPayItem, string appID, DateTime thisTime, ref string errMsg) { try { OrdOrderPayMst refPay null; if (!PayOrderManager.CreatePayOrderMST(payOrderMstParam, thisTime, ref refPay, ref errMsg)) { errMsg 生成退款单出错! errMsg; return false; } var PayInfo Senparc.Weixin.Config.SenparcWeixinSetting.Items[appID]; string AppID PayInfo.WxOpenAppId; string AppSecret PayInfo.WxOpenAppSecret; string Mch_id PayInfo.TenPayV3_MchId;//商户号 string Mch_key PayInfo.TenPayV3_Key;//商户密钥 string notifyUrl string.Format(PayInfo.TenPayV3_TenpayNotify, RefundNotifyUrl); var timeStamp TenPayV3Util.GetTimestamp(); var nonceStr TenPayV3Util.GetNoncestr(); //支付源单号 string outTradeNo ordOrderPayItem.PayNo;//商户订单号/支付单号 refPay.PayNoSource ordOrderPayItem.PayNo; //退款单号 string outRefundNo refPay.PayNo;//新退款单号 //支付时的总金额 int totalFee (int)(ordOrderPayItem.PayPrice * 100); //退款金额 int refundFee (int)(refPay.PayPrice * 100); string opUserId PayInfo.TenPayV3_MchId; var dataInfo new TenPayV3RefundRequestData(AppID, Mch_id, Mch_key, null, nonceStr, null, outTradeNo, outRefundNo, totalFee, refundFee, opUserId, null, notifyUrl: notifyUrl); //Logger.Info($PayInfo{PayInfo.SerializeObject()}); //Logger.Info($dataInfo{dataInfo.SerializeObject()}); //var basePath AppContext.BaseDirectory; //var certPath Path.Combine(basePath, Config/apiclient_cert.p12); //var cert D:\projects\orderapi.trydou.com\Config\apiclient_cert.p12;//根据自己的证书位置修改 //var password Mch_id;//默认为商户号建议修改 //配置好证书地址V3自动识别 var result  TenPayV3.Refund(dataInfo); refPay.PayResult result.SerializeObject(); //Logger.Info(提交退款申请 refPay.PayResult); if (result.return_code.ToUpper() SUCCESS result.result_code.ToUpper() SUCCESS) { using (TransactionScope scope new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { //业务处理 //提交事务 scope.Complete(); } return true; } else { errMsg result.err_code_des; Logger.Error(string.Format(提交退款失败退款单号{0},关联订单号{1},关联产品{2},退款result{3}, refPay.PayNo, refPay.RelationNo, refPay.RelationNos, refPay.PayResult)); } } catch (Exception ex) { errMsg ex.Message; Logger.Error(string.Format(提交退款异常Message{0}StackTrace{1}, ex.Message, ex.StackTrace)); } return false; }注注意退款接口的参数如金额退款地址等确保参数正确一般微信会收到退款的请求指令微信处理成功后会异步回调退款的接口给服务器。3退款统一回调处理直接上代码如下/// summary /// 退款回调 /// /summary [HttpPost(RefundNotifyUrl)] public ActionResult RefundNotifyUrl() { ResponseResult result new ResponseResult(); ResponseHandler resHandler new ResponseHandler(HttpContext); string return_code resHandler.GetParameter(return_code); string return_msg resHandler.GetParameter(return_msg); try { var mch_key Senparc.Weixin.Config.SenparcWeixinSetting.TenPayV3_Key; if (return_code.ToUpper() SUCCESS) { //string result_code resHandler.GetParameter(result_code); //string appId resHandler.GetParameter(appid); //string mch_id resHandler.GetParameter(mch_id); //string nonce_str resHandler.GetParameter(nonce_str); string req_info resHandler.GetParameter(req_info); var decodeReqInfo TenPayV3Util.DecodeRefundReqInfo(req_info, mch_key); var decodeDoc XDocument.Parse(decodeReqInfo); var refundNotifyXml decodeDoc.SerializeObject(); //获取接口中需要用到的信息 string out_trade_no decodeDoc.Root.Element(out_trade_no).Value; string out_refund_no decodeDoc.Root.Element(out_refund_no).Value; string transaction_id decodeDoc.Root.Element(transaction_id).Value; string refund_id decodeDoc.Root.Element(refund_id).Value; int total_fee int.Parse(decodeDoc.Root.Element(total_fee).Value); int refund_fee int.Parse(decodeDoc.Root.Element(refund_fee).Value); RefundNotifyParam param new RefundNotifyParam() { PayNo out_trade_no,//商户订单号 PayPrice ((float)refund_fee.ToInt() / 100).ToDecimal(),//退款金额 Out_refund_no out_refund_no,//商户退款单号 TransactionNo transaction_id,//微信订单号 Refund_id refund_id, //微信退款单号 }; Logger.Info(string.Format(退款回调参数return_code{0},return_msg{1},refundNotifyXml{2}, return_code, return_msg, refundNotifyXml)); result Service.RefundNotifyUrl(param); if (result.errno ! 0) { //回调处理逻辑失败 Logger.Error(string.Format(退款回调业务处理失败退款单号{0}{1}, param.Out_refund_no, result.errmsg)); } else { Logger.Info(string.Format(退款回调业务处理成功,退款单号{0}, param.Out_refund_no)); string xml string.Format(xml return_code![CDATA[{0}]]/return_code return_msg![CDATA[{1}]]/return_msg /xml, return_code, return_msg); return Content(xml, text/xml); } } else { //错误的订单处理 Logger.Error(string.Format(退款回调失败return_code{0},return_msg{1}, return_code, return_msg)); } } catch (Exception ex) { Logger.Error(string.Format(退款回调异常Message{0}StackTrace{1}, ex.Message, ex.StackTrace)); } return Content(fail, text/xml); }注如果业务处理退款成功后请返回结果告诉微信SUCCESS否则微信也会按规则不停发送退款回调给服务器直到次数用完为止具体查看上面规则文档。4总结以上就是微信退款的流程及相关知识的介绍如有在实际中遇到问题的可与我联系一起讨论学习下一篇会继续推出公众号与小程序的相关文章。相关推荐.NET Core 微信小程序支付——统一下单.NET Core 小程序开发零基础系列1——开发者启用并牵手成功.NET Core 小程序开发零基础系列2——小程序服务通知模板消息.net core redis的全套操作.NETCore 实现容器化Docker与私有镜像仓库管理点击【在看】与好朋友一起分享写留言一起交流
http://www.zqtcl.cn/news/675366/

相关文章:

  • 列出网站开发建设的步骤高端品牌女装连衣裙
  • 长沙设计网站建设搜索引擎优化平台
  • 网站建设 可以吗打开浏览器的网站
  • 惠州定制网站制作推荐chinacd wordpress第三性
  • 网站建设从初级到精通网站开发成本预算价目表
  • 网站程序开发上海高端网站开发站霸网络
  • 企业网站对网络营销的意义环保材料 技术支持 东莞网站建设
  • 房地产网站建设价格买卖网站
  • 网站宣传方案开发专业网站
  • 电子商务+网站建设wordpress首页幻灯
  • 网站建设表格的属性学校网站建设命名
  • 清远网站建设自学网站开发要多久
  • 可信网站 quot 验证能防范哪些安全.教育类app开发价格表
  • 网站设计服务流程深圳网站设计公司费用大概多少
  • 邮件网站怎么做的本地计算机做网站服务器
  • 自己建的网站打不开html5 手机网站 模版
  • 网站建设跟网站结构如何提高网站排名的方法
  • 网站模板 缓存商标网上开店创业计划书
  • 沧州网站建设微艾薇怎样给企业做网站
  • 如何做淘宝客的网站个人网站设计与制作代码
  • 信用门户网站建设观摩惠州专业做网站
  • wordpress打开网站前广告佛山百度推广seo服务
  • 松北建设局网站vps 用ip可以访问网站么
  • 网站图片内容免费开源crm
  • wordpress调用分类栏目wordpress文章优化
  • 建站公司上海企业官网模板下载
  • 网站建设推广话术wordpress 不显示缩略图
  • 企业电子商务网站建设和一般百拓公司做网站怎么样
  • 吉林网站建设司上海什么做网站的公司比较好
  • 吉安市建设规划局网站jsp wordpress