protected override void CreateSign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(); akeys.Add("spid"); akeys.Add("trans_time"); akeys.Add("stamp"); akeys.Add("cft_signtype"); akeys.Add("mchtype"); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + this.GetKey()); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToLower(); this.SetParameter("sign", sign); //debug信息 this.SetDebugInfo(sb.ToString() + " => sign:" + sign); }
/// <summary> /// 是否财付通签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。return boolean /// </summary> /// <returns></returns> public virtual Boolean IsTenpaySign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + this.GetKey()); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToLower(); this.SetDebugInfo(sb.ToString() + " &sign=" + sign); //debug信息 return(GetParameter("sign").ToLower().Equals(sign)); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// key和value通常用于填充最后一组参数 /// <returns></returns> public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 //&& "sign_type".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); //string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); //编码强制使用UTF8:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_1 string sign = MD5UtilHelper.GetMD5(sb.ToString(), "UTF-8").ToUpper(); return(sign); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> protected virtual void CreateSign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + this.GetKey()); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); this.SetParameter("sign", sign); //debug信息 this.SetDebugInfo(sb.ToString() + " => sign:" + sign); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// key和value通常用于填充最后一组参数 /// <returns></returns> public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 //&& "sign_type".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return(sign); }
/// <summary> /// 是否财付通签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。return boolean /// </summary> /// <returns></returns> public virtual bool IsTenpaySign() { var sb = new StringBuilder(); var akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { var v = (string)Parameters[k]; if ((null != v) && ("".CompareTo(v) != 0) && ("sign".CompareTo(k) != 0) && ("key".CompareTo(k) != 0)) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + GetKey()); var sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToLower(); SetDebugInfo(sb + " &sign=" + sign); //debug信息 return(GetParameter("sign").ToLower().Equals(sign)); }
private void button28_Click(object sender, EventArgs e) { //添加客服帐号 var kf_account = textBox1.Text.Trim(); if (kf_account == "") { responseBox.Text = "请在第1个文本框中输入kf_account\n完整客服账号,格式为:账号前缀@公众号微信号\n此处输入账号前缀"; return; } kf_account += "@" + ConfigurationManager.AppSettings["ConfigFilePath"].ToString(); var nickname = textBox2.Text.Trim(); if (nickname == "") { responseBox.Text = "请在第2个文本框中输入nickname\n客服昵称,最长6个汉字或12个英文字符"; return; } var password = textBox3.Text.Trim(); if (password == "") { responseBox.Text = "请在第3个文本框中输入password"; return; } var MD5password = MD5UtilHelper.GetMD5(password, null); var result = WxHelperCustomService.AddCustomAccount(accessToken, kf_account, nickname, MD5password); if (result.errcode == ReturnCode.请求成功) { responseBox.Text = result.errcode.ToString() + "\n" + result.errmsg.ToString(); } else { responseBox.Text = result.errcode.ToString() + "\n" + result.errmsg.ToString(); } }
/// <summary> /// 创建package签名 /// </summary> /// <returns></returns> public virtual string CreateMd5Sign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "".CompareTo(v) != 0) { sb.Append(k + "=" + v + "&"); } } string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToLower(); this.SetParameter("sign", sign); return(sign); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> /// key和value通常用于填充最后一组参数 /// <returns></returns> public virtual string CreateMd5Sign(string key = "", string value = "") { var sb = new StringBuilder(); var akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { var v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + Key); var sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return(sign); }
/// <summary> /// 随机生成Noncestr /// </summary> /// <returns></returns> public static string GetNoncestr() { Random random = new Random(); return(MD5UtilHelper.GetMD5(random.Next(1000).ToString(), "GBK")); }
protected void Refund() { //创建请求对象 RefundRequestHandler reqHandler = new RefundRequestHandler(null); //通信对象 TenPayHttpClient httpClient = new TenPayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //----------------------------- //设置请求参数 //----------------------------- reqHandler.Init(); reqHandler.SetKey(TenPayInfo.Key); reqHandler.SetParameter("partner", TenPayInfo.PartnerId); //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先 //reqHandler.setParameter("out_trade_no", "1458268681"); reqHandler.SetParameter("transaction_id", "1900000109201103020030626316"); reqHandler.SetParameter("out_refund_no", "2011030201"); reqHandler.SetParameter("total_fee", "1"); reqHandler.SetParameter("refund_fee", "1"); reqHandler.SetParameter("refund_fee", "1"); reqHandler.SetParameter("op_user_id", "1900000109"); reqHandler.SetParameter("op_user_passwd", MD5UtilHelper.GetMD5("111111", "GBK")); reqHandler.SetParameter("service_version", "1.1"); string requestUrl = reqHandler.GetRequestURL(); httpClient.SetCertInfo("c:\\key\\1900000109.pfx", "1900000109"); //设置请求内容 httpClient.SetReqContent(requestUrl); //设置超时 httpClient.SetTimeOut(10); string rescontent = ""; //后台调用 if (httpClient.Call()) { //获取结果 rescontent = httpClient.GetResContent(); resHandler.SetKey(TenPayInfo.Key); //设置结果参数 resHandler.SetContent(rescontent); //判断签名及结果 if (resHandler.IsTenpaySign() && resHandler.GetParameter("retcode") == "0") { //商户订单号 string out_trade_no = resHandler.GetParameter("out_trade_no"); //财付通订单号 string transaction_id = resHandler.GetParameter("transaction_id"); //业务处理 Response.Write("OK,transaction_id=" + resHandler.GetParameter("transaction_id") + "<br>"); } else { //错误时,返回结果未签名。 //如包格式错误或未确认结果的,请使用原来订单号重新发起,确认结果,避免多次操作 Response.Write("业务错误信息或签名错误:" + resHandler.GetParameter("retcode") + "," + resHandler.GetParameter("retmsg") + "<br>"); } } else { //后台调用通信失败 Response.Write("call err:" + httpClient.GetErrInfo() + "<br>" + httpClient.GetResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 Response.Write("http res:" + httpClient.GetResponseCode() + "," + httpClient.GetErrInfo() + "<br>"); Response.Write("req url:" + requestUrl + "<br/>"); Response.Write("req debug:" + reqHandler.GetDebugInfo() + "<br/>"); Response.Write("res content:" + Server.HtmlEncode(rescontent) + "<br/>"); Response.Write("res debug:" + Server.HtmlEncode(resHandler.GetDebugInfo()) + "<br/>"); }