支付链接获取

         //隐藏代码:获取一个订单model实体,并判断此订单是否发起过支付链接吊起,如发起过且链接没过期,则直接返回支付链接(仅限微信)if (//隐藏代码:判断是否为待付款){switch (dto.PayType){case //阿里:return new DtoView.PostCreatePayOrder() { Url = _aliPay_H5.GetPayForm(model.TotalPrice, model.OrderNumber, "商城订单"), HandlerUrl = "" };case //微信:if (string.IsNullOrEmpty(model.WXPayUrl) || (model.WXPayUrlCreateTime!=null && DateTime.Now.Subtract(model.WXPayUrlCreateTime.Value).TotalMinutes>=5)) {List<string> urlList = _wxPay_H5.UnifiedorderH5Async(model.TotalPrice, model.OrderNumber,ip, "商城订单").Result;if (urlList == null || urlList.Count != 2) {throw new Ex.ParameterException("微信支付链接生成错误");}//隐藏代码:更新订单实体中的支付状态和支付链接,下一次吊起支付可以用这次的支付链接,不必重复获取}return new DtoView.PostCreatePayOrder() { Url = model.WXPayUrl,HandlerUrl= model.WXPayHandlerUrl };default:throw new Ex.ParameterException("支付平台类型参数错误");}}throw new Ex.ParameterException("订单信息错误或已支付");

支付宝支付退款公共方法

using Alipay.AopSdk.Core;
using Alipay.AopSdk.Core.Domain;
using Alipay.AopSdk.Core.Request;
using Alipay.AopSdk.Core.Response;
using Alipay.AopSdk.Core.Util;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Text;namespace Test.Application.Common.AliPay
{public class AliPay_H5{private readonly AliPay.AliOption _aliOption;public AliPay_H5(IOptions<AliPay.AliOption> aliOption){_aliOption = aliOption.Value;}/// <summary>/// 获取支付宝H5支付表单/// </summary>/// <param name="totalfee"></param>/// <param name="orderNo"></param>/// <param name="description"></param>/// <returns></returns>public string GetPayForm(decimal totalfee, string orderNo, string description) {DefaultAopClient client = new DefaultAopClient(_aliOption.Ali_GatewayUrl, _aliOption.Ali_AppID, _aliOption.Ali_PrivateKey, "json", "1.0", "RSA2", _aliOption.Ali_PublicKey, "UTF-8", false);// 组装业务参数modelAlipayTradeWapPayModel model = new AlipayTradeWapPayModel();model.Body = description;model.Subject = "收款方";model.TotalAmount = totalfee.ToString();model.OutTradeNo = orderNo;model.ProductCode = "QUICK_WAP_WAY";model.QuitUrl = _aliOption.Ali_QuitUrl;AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();// 设置支付完成同步回调地址request.SetReturnUrl(_aliOption.Ali_ReturnUrl);// 设置支付完成异步通知接收地址request.SetNotifyUrl(_aliOption.Ali_NOTIFY_URL);// 将业务model载入到requestrequest.SetBizModel(model);AlipayTradeWapPayResponse response = null;response = client.PageExecute(request, null, "post");LogHelper.Info("支付宝获取支付订单返回:" + response.Body);return response.Body;}/// <summary>/// 验证回调数据/// </summary>/// <param name="sArray"></param>/// <returns></returns>public bool ValidationPayNotify(Dictionary<string, string> sArray) {bool checkR= AlipaySignature.RSACheckV1(sArray, _aliOption.Ali_PublicKey, "UTF-8", "RSA2", false);return checkR;}/// <summary>/// 支付宝退款/// </summary>/// <param name="orderNo"></param>/// <param name="refundNo"></param>/// <param name="refund"></param>/// <param name="total"></param>/// <param name="reason"></param>/// <returns></returns>public string Refund(string orderNo, string refundNo, decimal refund, decimal total, string reason) {DefaultAopClient client = new DefaultAopClient(_aliOption.Ali_GatewayUrl, _aliOption.Ali_AppID, _aliOption.Ali_PrivateKey, "json", "1.0", "RSA2", _aliOption.Ali_PublicKey, "UTF-8", false);AlipayTradeRefundModel model = new AlipayTradeRefundModel();model.OutTradeNo = orderNo;model.TradeNo = "";model.RefundAmount = refund.ToString();model.RefundReason = reason;model.OutRequestNo = refundNo;AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();request.SetBizModel(model);AlipayTradeRefundResponse response = null;response = client.Execute(request);LogHelper.Info("支付宝订单退款返回:" + response.Body);return response.Body;}public void CloseOrder(string orderNo) {DefaultAopClient client = new DefaultAopClient(_aliOption.Ali_GatewayUrl, _aliOption.Ali_AppID, _aliOption.Ali_PrivateKey, "json", "1.0", "RSA2", _aliOption.Ali_PublicKey, "UTF-8", false);AlipayTradeCloseModel model = new AlipayTradeCloseModel();model.OutTradeNo = orderNo;model.TradeNo = "";AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();request.SetBizModel(model);AlipayTradeCloseResponse response = null;response = client.Execute(request);LogHelper.Info("支付宝关闭订单返回:" + response.Body);}}
}
 public class AliOption : IOptions<AliOption>{AliOption IOptions<AliOption>.Value => this;public string Ali_AppID { get; set; }public string Ali_GatewayUrl { get; set; }public string Ali_PrivateKey { get; set; }public string Ali_PublicKey { get; set; }public string Ali_NOTIFY_URL { get; set; }public string Ali_REFUNDNOTIFY_URL { get; set; }public string Ali_QuitUrl { get; set; }public string Ali_ReturnUrl { get; set; }}

微信支付退款公共方法


using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Options;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;namespace Test.Application.Common.WxPay
{public class WxPay_H5{private HttpClient _client { get; }private readonly WxPay.WeiXinOption _weiXinOption;private readonly IWebHostEnvironment _webHostEnvironment;private readonly string BaseAddress = "https://api.mch.weixin.qq.com";public WxPay_H5(HttpClient client, IOptions<WxPay.WeiXinOption> weChatOptions, IWebHostEnvironment webHostEnvironment){// GitHub API versioningclient.DefaultRequestHeaders.Add("Accept","application/json");// GitHub requires a user-agentclient.DefaultRequestHeaders.Add("User-Agent","HttpClientFactory-Sample");_client = client;_weiXinOption = weChatOptions.Value;_webHostEnvironment = webHostEnvironment;}/// <summary>/// H5下单/// </summary>/// <param name="totalfee">支付金额,单位:分</param>/// <param name="orderNo">订单号</param>/// <param name="description">商品描述</param>/// <returns></returns>public async Task<List<string>> UnifiedorderH5Async(decimal totalfee, string orderNo, string description, string ip){H5Pay h5Pay = new H5Pay() { appid = _weiXinOption.WX_AppID, mchid = _weiXinOption.WX_mch_ID, description = description, out_trade_no = orderNo, notify_url = _weiXinOption.WX_NOTIFY_URL, amount = new Amount { total = (int)(totalfee * 100) }, scene_info = new Scene_Info { payer_client_ip = ip, h5_info = new H5_Info { type = "Wap" } } };var param = Newtonsoft.Json.JsonConvert.SerializeObject(h5Pay);var json = await Post(param, "/v3/pay/transactions/h5");LogHelper.Info("微信支付创建订单微信返回:" + json);if (json.Contains("h5_url"))json = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json)["h5_url"];return await GetHandleUrl(json);}/// <summary>/// H5查询订单/// </summary>/// <param name="out_trade_no"></param>/// <returns></returns>public async Task<string> GetOrderH5Async(string out_trade_no){var json = await Get($"/v3/pay/transactions/out-trade-no/{out_trade_no}?mchid=" + _weiXinOption.WX_mch_ID);return json;}/// <summary>/// H5关闭订单/// </summary>/// <returns></returns>public async Task CloseOrderH5Async(string orderNo){H5PayClose h5PayClose = new H5PayClose() { mchid = _weiXinOption.WX_mch_ID };var param = Newtonsoft.Json.JsonConvert.SerializeObject(h5PayClose);await Post(param, $"/v3/pay/transactions/out-trade-no/{orderNo}/close");}/// <summary>/// H5订单退款/// </summary>/// <param name="orderNo"></param>/// <param name="refundNo"></param>/// <param name="refund"></param>/// <param name="total"></param>/// <param name="reason"></param>/// <returns></returns>public async Task<string> RefundH5Async(string orderNo, string refundNo, decimal refund, decimal total, string reason){H5PayRefund h5PayRefund = new H5PayRefund() { out_trade_no = orderNo, out_refund_no = refundNo, notify_url = _weiXinOption.WX_REFUNDNOTIFY_URL, amount = new RefundAmount { total = (int)(total * 100), refund = (int)(refund * 100), currency = "CNY" } };var param = Newtonsoft.Json.JsonConvert.SerializeObject(h5PayRefund);LogHelper.Info("微信订单退款参数:" + param);var json = await Post(param, "/v3/refund/domestic/refunds");LogHelper.Info("微信订单退款返回:" + json);if (json.Contains("status"))json = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json)["status"];return json;}public class H5Pay{public string mchid { get; set; }public string out_trade_no { get; set; }public string appid { get; set; }public string description { get; set; }public string notify_url { get; set; }public Amount amount { get; set; }public Scene_Info scene_info { get; set; }}public class H5PayClose{public string mchid { get; set; }}#region 退款public class H5PayRefund{/// <summary>/// 商户订单号     /// </summary>public string out_trade_no { get; set; }/// <summary>/// 商户退款单号   /// </summary>public string out_refund_no { get; set; }/// <summary>/// 退款原因(非必填)/// </summary>//public string reason { get; set; }/// <summary>/// 退款结果回调url (非必填) /// </summary>public string notify_url { get; set; }/// <summary>/// 退款金额/// </summary>public RefundAmount amount { get; set; }}/// <summary>/// 退款金额/// </summary>public class RefundAmount{/// <summary>/// refund/// </summary>public int refund { get; set; }/// <summary>/// 原订单金额 /// </summary>public int total { get; set; }/// <summary>/// 退款币种(CNY)/// </summary>public string currency { get; set; }}/// <summary>/// 指定商品/// </summary>public class GoodsDetailListObj{/// <summary>/// 商户侧商品编码  /// </summary>public string merchant_goods_id { get; set; }/// <summary>/// 微信侧商品编码(非必填)/// </summary>public string wechatpay_goods_id { get; set; }/// <summary>/// 商品名称(非必填)/// </summary>public string goods_name { get; set; }/// <summary>/// 商品单价 /// </summary>public int unit_price { get; set; }/// <summary>/// 商品退款金额    /// </summary>public int refund_amount { get; set; }/// <summary>/// 商品退货数量 /// </summary>public int refund_quantity { get; set; }}#endregionpublic class Amount{public int total { get; set; }public string currency { get; set; } = "CNY";}public class Scene_Info{public string payer_client_ip { get; set; }public H5_Info h5_info { get; set; }}public class H5_Info{public string type { get; set; }}public async Task<string> Post(string jsonData, string url){CreateSign("POST", url, jsonData);var postData = new StringContent(jsonData, Encoding.UTF8, "application/json");var response = await _client.PostAsync(BaseAddress + url, postData);LogHelper.Info("微信请求结果:" + response);response.EnsureSuccessStatusCode();return await response.Content.ReadAsStringAsync();}public async Task<string> Get(string url){CreateSign("GET", url, "");var response = await _client.GetAsync(BaseAddress + url);response.EnsureSuccessStatusCode();return await response.Content.ReadAsStringAsync();}/// <summary>/// 创建签名/// </summary>/// <param name="method"></param>/// <param name="uri"></param>/// <param name="body"></param>private void CreateSign(string method, string uri, string body){string nonce_str = Guid.NewGuid().ToString();string timestamp = (Tools.UnicodeConvert.ConvertDateTimeInt(DateTime.Now) + "").Substring(0, 10);string message = $"{method}\n{uri}\n{timestamp}\n{nonce_str}\n{body}\n";string signature = Tools.CertificateHelper.Sign(message, _webHostEnvironment.ContentRootPath + "\\" + _weiXinOption.WX_Certificate, _weiXinOption.WX_mch_ID);_client.DefaultRequestHeaders.Add("Authorization", $"WECHATPAY2-SHA256-RSA2048 mchid=\"{_weiXinOption.WX_mch_ID}\",serial_no=\"{_weiXinOption.WX_Serial_No}\",nonce_str=\"{nonce_str}\",timestamp=\"{timestamp}\",signature=\"{signature}\"");}/// <summary>/// 获取解密后的数据/// </summary>/// <param name="associatedData"></param>/// <param name="nonce"></param>/// <param name="ciphertext"></param>/// <returns></returns>public string AesGcmDecrypt(string associatedData, string nonce, string ciphertext){GcmBlockCipher gcmBlockCipher = new GcmBlockCipher(new AesEngine());AeadParameters aeadParameters = new AeadParameters(new KeyParameter(Encoding.UTF8.GetBytes(_weiXinOption.WX_AppSecret)),128,Encoding.UTF8.GetBytes(nonce),Encoding.UTF8.GetBytes(associatedData));gcmBlockCipher.Init(false, aeadParameters);byte[] data = Convert.FromBase64String(ciphertext);byte[] plaintext = new byte[gcmBlockCipher.GetOutputSize(data.Length)];int length = gcmBlockCipher.ProcessBytes(data, 0, data.Length, plaintext, 0);gcmBlockCipher.DoFinal(plaintext, length);return Encoding.UTF8.GetString(plaintext);}/// <summary>/// 获取处理后的支付链接(不获取安卓程序内置浏览器吊起错误)/// </summary>/// <param name="oldUrl"></param>/// <returns></returns>public async Task<List<string>> GetHandleUrl(string oldUrl) {List<string> urlList = new List<string>();HttpClient httpClient = new HttpClient();httpClient.DefaultRequestHeaders.Add("Host", "wx.tenpay.com");httpClient.DefaultRequestHeaders.Add("Accept-Language", "en, zh-CN; q=0.8,zh; q=0.6,en-US; q=0.4");httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml");httpClient.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");string[] urls = _weiXinOption.WX_NOTIFY_URL.Split('/');httpClient.DefaultRequestHeaders.Add("Referer", "http://" + urls[2] + "/");var response = await httpClient.GetAsync(oldUrl);response.EnsureSuccessStatusCode();var json = await response.Content.ReadAsStringAsync();string pattern = "\"weixin(.*?)\"";Regex regex = new Regex(pattern);Match matcher = regex.Match(json);if (matcher.Success) {if (matcher.Groups.Count > 0) {urlList.Add(oldUrl);urlList.Add(matcher.Groups[0].Value.Substring(1, matcher.Groups[0].Value.Length - 2));}}return urlList;}}}
 public class WeiXinOption: IOptions<WeiXinOption>{WeiXinOption IOptions<WeiXinOption>.Value => this;public string WX_AppID { get; set; }public string WX_AppSecret { get; set; }public string WX_mch_ID { get; set; }public string WX_IP { get; set; }public string WX_NOTIFY_URL { get; set; }public string WX_REFUNDNOTIFY_URL { get; set; }public string WX_Certificate { get; set; }public string WX_Serial_No { get; set; }}

支付宝支付回调

     /// <summary>/// 支付宝支付完成回调(后台用)/// </summary>public dynamic CallBack(){var coll = Request.Form;List<string> requestItem = coll.Keys.ToList();Dictionary<string, string> sArray = new Dictionary<string, string>();foreach (var item in requestItem){sArray.Add(item, Request.Form[item]);}string strr = "";foreach (var item in sArray){strr +="Key="+ item.Key + ";Value=" + item.Value + ";";}if (_aliPay_H5.ValidationPayNotify(sArray)){string RechargeTime = sArray.GetValueOrDefault("gmt_payment");string RechargeMoney = sArray.GetValueOrDefault("total_amount");string RechargeNo = sArray.GetValueOrDefault("out_trade_no");decimal price = decimal.Zero;if (!decimal.TryParse(RechargeMoney, out price)){//支付宝支付回调失败return new{code = "ERROR",message = Common.Enums.StateEnum.ShopPayNoticeState.PriceChangeError.GetDescription()};}int payType = (int)Common.Enums.TypeEnum.ShopOrderPayType.Ali;DateTime payTime = DateTime.Now;if (RechargeTime.Contains("T")){RechargeTime = RechargeTime.Replace('T', ' ');if (!DateTime.TryParse(RechargeTime, out payTime)){//支付宝支付回调失败return new{code = "ERROR",message = Common.Enums.StateEnum.ShopPayNoticeState.TimeChangeError.GetDescription()};}}return TestCB(RechargeNo, "", price, payType, payTime);}return "验证失败";}///<summary>///支付宝微信支付完成回调通用业务处理方法///</summary>private dynamic TestCB(string orderNumber, string TransactionId, decimal price, int payType,DateTime payTime) {//隐藏代码:用orderNumber获取订单实体并判断price数据是否正确if (payType == (int)Common.Enums.TypeEnum.ShopOrderPayType.Ali){return "success";}else {return new{code = "SUCCESS",message = ""};}}

微信支付退款回调

     /// <summary>/// 微信支付完成回调(后台用)/// </summary>public dynamic PayCB(){#region var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();if (syncIOFeature != null){syncIOFeature.AllowSynchronousIO = true;}#endregionSystem.IO.Stream s = HttpContext.Request.Body;int count = 0;byte[] buffer = new byte[1024];StringBuilder builder = new StringBuilder();while ((count = s.Read(buffer, 0, 1024)) > 0){builder.Append(Encoding.UTF8.GetString(buffer, 0, count));}s.Flush();s.Close();s.Dispose();string notDeStr = builder;JObject notDeObj = JObject.Parse(notDeStr);string ciphertext = notDeObj["resource"]["ciphertext"].ToString();string associatedData = notDeObj["resource"]["associated_data"].ToString();string nonce = notDeObj["resource"]["nonce"].ToString();string deData = _wxPay_H5.AesGcmDecrypt(associatedData,nonce, ciphertext);JObject deObj = JObject.Parse(deData);string RechargeMoney = deObj["amount"]["payer_total"].ToString();string RechargeTime = deObj["success_time"].ToString();string RechargeNo = deObj["out_trade_no"].ToString();string TransactionId = deObj["transaction_id"].ToString();decimal price = decimal.Zero;if (decimal.TryParse(RechargeMoney, out price)){price = price / 100;}else{//微信支付回调失败转换金额失败return new{code = "ERROR",message = Common.Enums.StateEnum.ShopPayNoticeState.PriceChangeError.GetDescription()};}int payType = (int)Common.Enums.TypeEnum.ShopOrderPayType.WX;DateTime payTime = DateTime.Now;if (RechargeTime.Contains("T")){RechargeTime = RechargeTime.Replace('T', ' ');if (!DateTime.TryParse(RechargeTime, out payTime)){//微信支付回调失败-转换时间失败return new{code = "ERROR",message = Common.Enums.StateEnum.ShopPayNoticeState.TimeChangeError.GetDescription()};}}return TestCB(RechargeNo, TransactionId, price, payType, payTime);}/// <summary>/// 微信退款回调(后台用)/// </summary>public dynamic TKCB(){//获取回调POST过来的xml数据的代码#region //.net core 3.0以后需加下边这段,否则Stream会报错var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();if (syncIOFeature != null){syncIOFeature.AllowSynchronousIO = true;}#endregion//接收从微信后台POST过来的数据System.IO.Stream s = HttpContext.Request.Body;int count = 0;byte[] buffer = new byte[1024];StringBuilder builder = new StringBuilder();while ((count = s.Read(buffer, 0, 1024)) > 0){builder.Append(Encoding.UTF8.GetString(buffer, 0, count));}s.Flush();s.Close();s.Dispose();string notDeStr = builder;JObject notDeObj = JObject.Parse(notDeStr);string ciphertext = notDeObj["resource"]["ciphertext"].ToString();string associatedData = notDeObj["resource"]["associated_data"].ToString();string nonce = notDeObj["resource"]["nonce"].ToString();string deData = _wxPay_H5.AesGcmDecrypt(associatedData, nonce, ciphertext);JObject deObj = JObject.Parse(deData);string RefundTime = deObj["success_time"].ToString();string OrderNumber = deObj["out_trade_no"].ToString();string RefundNo = deObj["out_refund_no"].ToString();int payType = (int)Common.Enums.TypeEnum.ShopOrderPayType.WX;DateTime refundTime = DateTime.Now;if (RefundTime.Contains("T")){RefundTime = RefundTime.Replace('T', ' ');if (!DateTime.TryParse(RefundTime, out refundTime)){//微信支付回调失败-订单号:" + OrderNumber + ",错误类型:转换时间失败" + RefundTimereturn new{code = "ERROR",message = Common.Enums.StateEnum.ShopRefundNoticeState.TimeChangeError.GetDescription()};}}//隐藏业务代码,判断参数是否正确,订单是否正确return new{code = "SUCCESS",message = ""};}

c# .net core 微信、支付宝H5支付链接获取,支付回调方法,退款方法小计相关推荐

  1. 新版开运网运势测算网站源码 支持微信/支付宝H5支付 支持分销代理 可封装APP

    源码介绍 我在外面花钱购买的某站VIP资源,就是那种搬砖站,买来没时间调试发给大家看看吧,喜欢的就下去玩玩! 支持微信/支付宝H5和电脑端扫码支付.手机端可以调起微信/支付宝应用支付 支持后台设置价格 ...

  2. .Net Core 微信/支付宝 官方Demo

    源码下载:.Net Core 微信/支付宝 Demo 小宅博客网小宅网络,又名小宅博客,bilibili996,全站提供优质代码模块及人工智能相关技术资料服务,统筹网络资料,合理规划整理,全国软件就业 ...

  3. 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...

    苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径.捷径是苹果手机一个比较实用的功能,如今手机扫码支付非常流行,因此在苹果手机中安装一个支付捷径,还是非常方便的.下面小编就来分享一个微信 ...

  4. 支付宝微信推出高速收费新服务器,高速收费迎来巨变,微信支付宝同时开启“无感支付”...

    原标题:高速收费迎来巨变,微信支付宝同时开启"无感支付" 当你还在惊叹手机支付带来的改变的时候,马云.马化腾已经开始脱离手机了!这个时代变化究竟有多快? 近日,微信.支付宝同时宣布 ...

  5. 微信支付宝双端兼容获取手机号头像昵称

    微信支付宝双端兼容获取手机号头像昵称 1. 页面效果 参考上一篇的 微信小程序获取用户头像昵称手机号最新版 2. 授权手机号弹窗 <u-modal v-model="showAutho ...

  6. C#(Winform)+H5(Html)微信/支付宝对接接口及前端支付页面

    由于工作需要,开了一个C#(Winform)+H5(Html)的微信/支付宝对接接口,需要使用的小伙伴可通过链接进行下载,欢迎各位小伙伴交流探讨. 测试链接:http://dumikj.com/pay ...

  7. 微信支付宝H5收款码扫码转账个人通道仿原生接口带备注可回调成功率9成以上

    微信支付宝收款码转账H5免签出码带备注可回调成功率99.9%支持重复支付多种轮询规则提高存活率         本收款系统,可使用支付宝个人码 企业支付宝收款码 微信个人码收款,可以完成即时到账收款接 ...

  8. 支付宝H5 与网页端支付开发

    在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...

  9. 2021年最新易支付修复版源码支持微信支付宝官方接口和码支付网信钱包等/个人也能用的易支付商户系统

    介绍: 安装环境介绍:Linux + Nginx1.1x +PHP7.2 +MySql5.6 集合了微信官方+支付宝官方+易商户+码支付+易通商户+网信钱包免签即时到账接口,让个人用户也能用上好用的易 ...

最新文章

  1. MySQL Cluster 日常维护
  2. 丢掉uVision2吧,uVision早就有了
  3. Caffe学习记录:Cifar-10 自定义网络训练记录
  4. dispatch作用 react_「React系列」手把手带你撸后台系统(Redux与路由鉴权)
  5. 【报错笔记】Navicat连接数据库显示2003错误,无法连接到数据库
  6. js 调用 oc 的解释
  7. 如何查看linux中文件打开情况
  8. Mac jupyter 绘制matplotlib图像解决中文空格的问题
  9. Matlab系列教程_基础知识_运算符
  10. modbus rtu功能码理解
  11. 关于killer网卡在linux 2.6.11版本以上的驱动安装
  12. 微弱信号检测技术在机械早期故障探查中的应用研究
  13. Win10微软应用商店打不开/无响应/闪退/错误/无法加载的解决方法
  14. CDMA 短信中心号码
  15. 【哈夫曼树】创建哈夫曼树
  16. 搭建kafka集群并使用springboot 整合
  17. Metal 框架之渲染到多个视口
  18. Codeforces Beta Round #7
  19. 指甲上长 黑线  ,出问题的可能是: 肾/肝/肠胃/皮肤。需要去医院,看皮肤科和 消化科。
  20. springboot1.x整合redis

热门文章

  1. 微信开发:springboot接入微信公众号
  2. java 操作word中表格_Java 使用Spire.Cloud.Word给Word文档添加表格
  3. Python-练习 42. Is-A, Has-A, 对象和类
  4. 固态硬盘数据恢复商家梳理
  5. d3.js 实现企业图谱(基于vue)
  6. 我的世界java皮肤展开图,我的世界情侣皮肤,我的世界皮肤展开图做图片
  7. css3切角文本框_CSS3如何实现4个切角
  8. hive数据库操作大全
  9. python自动化交易 期货_一只股票一天可以撤单单几次
  10. 工作简历写些什么比较好? 优秀的求职简历模板包括哪些内容