/// <summary> /// 统一下单信息 /// </summary> /// <param name="tradeNo">订单号</param> /// <param name="totalFee">订单金额</param> /// <param name="title">标题</param> /// <param name="notifyUrl">回调Url</param> /// <param name="openId">OpenId</param> /// <param name="deviceIp">设备Ip</param> /// <param name="tradeType">交易类型</param> /// <param name="signType">签名类型</param> public UnifiedOrderInfo(string tradeNo, decimal totalFee, string title, string notifyUrl, string openId, string deviceIp, TradeType tradeType = TradeType.JSAPI, WxPaySignType signType = WxPaySignType.MD5) { TradeNo = tradeNo; TotalFee = totalFee; Body = title; NotifyUrl = notifyUrl; OpenId = openId; DeviceIp = deviceIp; TradeType = tradeType; SignType = signType; }
/// <summary> /// 创建微信支付签名 /// </summary> /// <param name="dic"></param> /// <param name="apiKey"></param> /// <param name="signType"></param> /// <returns></returns> public static string GenerateWxPaySignature(Dictionary <string, string> dic, string apiKey, WxPaySignType signType) { var arr = dic.OrderBy(z => z.Key).ToArray(); string stringSign = string.Empty; foreach (var item in arr) { if (!string.IsNullOrEmpty(item.Value)) { stringSign += $"{item.Key}={item.Value}&"; } } stringSign += $"key={apiKey}"; string sign = string.Empty; switch (signType) { case WxPaySignType.MD5: sign = UtilityHelper.MD5Encrypt(stringSign).ToUpper(); break; case WxPaySignType.SHA256: sign = UtilityHelper.SHA256Encrypt(stringSign, apiKey).ToUpper(); break; default: throw new SignTypeNotSupportException($"{signType.ToString()}不受支持"); } return(sign); }
/// <summary> /// 创建chooseWxPay配置 /// </summary> /// <param name="unifiedOrder"></param> /// <param name="signType"></param> /// <returns></returns> public ChooseWxPayConfig GenerateChooseWxPayConfig(UnifiedOrder unifiedOrder, WxPaySignType signType = WxPaySignType.MD5) { //转换字典 var dic = UtilityHelper.Obj2Dictionary(unifiedOrder); //生成签名 unifiedOrder.sign = SignatureGenerater.GenerateWxPaySignature(dic, _baseSettings.ApiKey, signType); //统一下单 var unifiedOrderResult = _wxPayInterfaceCaller.UnifiedOrder(unifiedOrder); var nonceStr = UtilityHelper.GenerateNonce(); var timeStamp = UtilityHelper.GetTimeStamp(); var chooseWxPayConfig = new ChooseWxPayConfig() { nonceStr = nonceStr, timestamp = timeStamp, package = unifiedOrderResult.prepay_id, signType = signType.GetDescription() }; var paySign = SignatureGenerater.GenerateWxPaySignature(new Dictionary <string, string>() { { "appId", _baseSettings.AppId }, { "timeStamp", chooseWxPayConfig.timestamp.ToString() }, { "nonceStr", chooseWxPayConfig.nonceStr }, { "package", chooseWxPayConfig.package }, { "signType", chooseWxPayConfig.signType } }, _baseSettings.ApiKey, signType); chooseWxPayConfig.paySign = paySign; return(chooseWxPayConfig); }