/// <summary> /// 卡券签名 /// 1.将 api_ticket(特别说明:api_ticket 相较 appsecret 安全性更高,同时兼容老版本文档中使用的 appsecret 作为签名凭证。)、app_id、location_id、times_tamp、nonce_str、card_id、card_type的value值进行字符串的字典序排序。 /// 2.将所有参数字符串拼接成一个字符串进行sha1加密,得到cardSign。 /// </summary> /// <param name="apiTicket"></param> /// <param name="noncestr"></param> /// <param name="timestamp"></param> /// <returns></returns> public static string MakeCardSign(string apiTicket, out string noncestr, out string timestamp) { string cardSign = string.Empty; try { string param = string.Empty; noncestr = WeChatPayData.MakeNonceStr(); timestamp = WeChatPayData.MakeTimeStamp(); WeChatPayData signData = new WeChatPayData(); signData.SetValue(apiTicket, apiTicket); signData.SetValue(Config.APPID, Config.APPID); signData.SetValue(timestamp, timestamp); signData.SetValue(noncestr, noncestr); //参与加密的参数value连接成字符串 foreach (KeyValuePair <string, object> kvp in signData.GetValues()) { param += kvp.Key; } Log.Debug("MakeJsAPISign", "SHA1 encrypt param : " + param); //SHA1加密 cardSign = FormsAuthentication.HashPasswordForStoringInConfigFile(param, "SHA1"); Log.Debug("MakeJsAPISign", "SHA1 encrypt result : " + cardSign); } catch (Exception ex) { Log.Error("MakeJsAPISign", ex.ToString()); throw ex; } return(cardSign); }
public string GetPrePayUrl(string out_trade_no) { Log.Info("微信端二维码生成开始..."); WeChatPayData data = new WeChatPayData(); data.SetValue("appid", BasicConfig.WeChat_AppId); //公众帐号id data.SetValue("mch_id", BasicConfig.WeChat_MchId); //商户号 data.SetValue("nonce_str", GenerateNonceStr()); //随机字符串 data.SetValue("product_id", out_trade_no); //商品ID data.SetValue("time_stamp", DateTimeUtil.DateTimeToUnixTimestamp(DateTime.Now)); //时间戳 data.SetValue("sign", data.MakeSign(BasicConfig.WeChat_AppKey)); //签名 string str = ToUrlParams(data.GetValues()); //转换为URL串 string url = "weixin://wxpay/bizpayurl?" + str; Log.Info("微信端二维码生成结束,二维码Url : " + url); return(url); }