/// <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); }
/// <summary> /// Js-API支付 /// </summary> /// <param name="info"></param> /// <param name="signType"></param> /// <returns></returns> public ChooseWxPayConfig JsApiPay(UnifiedOrderInfo info) { var unifiedOrder = new UnifiedOrder() { nonce_str = info.NonceStr, appid = _baseSettings.AppId, mch_id = _baseSettings.MchId, out_trade_no = info.TradeNo, sign_type = info.SignType.GetDescription(), total_fee = (int)(info.TotalFee * 100), openid = info.OpenId, notify_url = info.NotifyUrl, fee_type = info.FeeType, spbill_create_ip = info.DeviceIp, time_start = info.StartTime.ToString("yyyyMMddHHmmss"), time_expire = info.EndTime.ToString("yyyyMMddHHmmss"), attach = info.Attach, body = info.Body, detail = info.Detail, goods_tag = info.GoodTags, limit_pay = info.UseLimitPay ? "no_credit" : null, trade_type = info.TradeType, scene_info = info.SceneInfo }; //转换字典 var dic = UtilityHelper.Obj2Dictionary(unifiedOrder); //生成签名 unifiedOrder.sign = SignatureGenerater.GenerateWxPaySignature(dic, _baseSettings.ApiKey, info.SignType); //统一下单 var unifiedOrderResult = _wxPayInterfaceCaller.UnifiedOrder(unifiedOrder); var chooseWxPayConfig = new ChooseWxPayConfig() { nonceStr = info.NonceStr, timestamp = info.TimeStamp, package = unifiedOrderResult.prepay_id, signType = info.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, info.SignType); chooseWxPayConfig.paySign = paySign; return(chooseWxPayConfig); }
public string ReplyMessageMiddle(string replyMsg) { string replyMsgEncrypted = CryptographyHelper.AESEncrypt(replyMsg, _baseSettings.EncodingAESKey, _baseSettings.AppId); string timestamp = UtilityHelper.GetTimeStamp().ToString(); string nonce = UtilityHelper.GenerateNonce(); string signature = SignatureGenerater.GenerateSignature(_baseSettings.Token, timestamp, nonce, replyMsgEncrypted); StringBuilder sb = new StringBuilder(); sb.Append($"<xml>"); sb.Append($"<Encrypt><![CDATA[{replyMsgEncrypted}]]></Encrypt>"); sb.Append($"<MsgSignature><![CDATA[{signature}]]></MsgSignature>"); sb.Append($"<TimeStamp><![CDATA[{timestamp}]]></TimeStamp>"); sb.Append($"<Nonce><![CDATA[{nonce}]]></Nonce>"); sb.Append($"</xml>"); return(sb.ToString()); }
/// <summary> /// 创建JS-API配置 /// </summary> /// <param name="url"></param> /// <param name="jsApis"></param> /// <returns></returns> public JsApiConfig GenerateJsApiConfig(string url, params string[] jsApis) { var timeStamp = UtilityHelper.GetTimeStamp(); var nonceStr = UtilityHelper.GenerateNonce(); var accessToken = _accessTokenContainer.GetAccessToken(); var ticket = _ticketContainer.GetJsApiTicket(accessToken); var signature = SignatureGenerater.GenerateJsApiSignature(ticket, nonceStr, timeStamp, url); return(new JsApiConfig() { debug = _baseSettings.Debug, appId = _baseSettings.AppId, timestamp = timeStamp, nonceStr = nonceStr, signature = signature, jsApiList = jsApis }); }
/// <summary> /// H5支付 /// </summary> /// <param name="info"></param> /// <returns></returns> public string H5Pay(UnifiedOrderInfo info) { var unifiedOrder = new UnifiedOrder() { nonce_str = info.NonceStr, appid = _baseSettings.AppId, mch_id = _baseSettings.MchId, out_trade_no = info.TradeNo, sign_type = info.SignType.GetDescription(), total_fee = (int)(info.TotalFee * 100), openid = info.OpenId, notify_url = info.NotifyUrl, fee_type = info.FeeType, spbill_create_ip = info.DeviceIp, time_start = info.StartTime.ToString("yyyyMMddHHmmss"), time_expire = info.EndTime.ToString("yyyyMMddHHmmss"), attach = info.Attach, body = info.Body, detail = info.Detail, goods_tag = info.GoodTags, limit_pay = info.UseLimitPay ? "no_credit" : null, trade_type = info.TradeType, scene_info = info.SceneInfo }; //转换字典 var dic = UtilityHelper.Obj2Dictionary(unifiedOrder); //生成签名 unifiedOrder.sign = SignatureGenerater.GenerateWxPaySignature(dic, _baseSettings.ApiKey, info.SignType); //统一下单 var unifiedOrderResult = _wxPayInterfaceCaller.UnifiedOrder(unifiedOrder); var mWebUrl = unifiedOrderResult.mweb_url; if (!string.IsNullOrEmpty(info.RedirectUrl)) { mWebUrl += $"&redirect_url={HttpUtility.UrlEncode(info.RedirectUrl)}"; } return(mWebUrl); }
/// <summary> /// 签名有效性验证 /// </summary> /// <param name="signature">签名</param> /// <param name="strings">生成签名的字符串</param> /// <returns></returns> public bool VerifySignature(string signature, params string[] strings) { string sign = SignatureGenerater.GenerateSignature(strings); return(sign == signature); }