public bool VerifyNotifyValue(NameValueCollection nvc, string partnerKey, string notifyUrl, string encoding) { //进行排序; string[] Sortedstr = PaymentHelper.BubbleSort(nvc.AllKeys); //构造待md5摘要字符串 ; StringBuilder presb = new StringBuilder(1024); for (int i = 0; i < Sortedstr.Length; i++) { if (!string.IsNullOrEmpty(nvc[Sortedstr[i]]) && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type") { presb.Append(Sortedstr[i]); presb.Append("="); presb.Append(nvc[Sortedstr[i]]); if (i != Sortedstr.Length - 1) { presb.Append("&"); } } } presb.Append(partnerKey); bool md5Check = (PaymentHelper.GetMD5 (presb.ToString(), encoding) == nvc["sign"]); string notifyId = nvc["notify_id"]; if (!string.IsNullOrEmpty(notifyId) && md5Check) { return(VerifyNotifyRequest(notifyId, notifyUrl)); } else //如果不需要向支付宝验证通知是否合法,直接返回md5check结果 { return(md5Check); } }
/// <summary> /// 创建支付宝URL /// </summary> /// <param name="gateway">支付接口</param> /// <param name="service">接口类型</param> /// <param name="partner">合作伙伴ID</param> /// <param name="sign_type">签名类型</param> /// <param name="out_trade_no">订单号</param> /// <param name="subject">商品名称</param> /// <param name="body">商品描述</param> /// <param name="payment_type">支付类型</param> /// <param name="total_fee">总金额0.01~50000.00</param> /// <param name="show_url">展示地址</param> /// <param name="seller_email">卖家账号</param> /// <param name="key">partner账户的支付宝安全校验码</param> /// <param name="return_url">服务器通知返回页面,注意url不能带任何querysting(f**k ALIPay)</param> /// <param name="encoding">partner账户的支付宝安全校验码</param> /// <param name="notify_url">服务器通知接口,注意url不能带任何querysting(f**k ALIPay)</param> /// <returns>跳转的URL</returns> public string CreatUrl( string gateway, string service, string partner, string sign_type, string out_trade_no, string subject, string body, string payment_type, string total_fee, string show_url, string seller_email, string key, string return_url, string encoding, string notify_url ) { int i; //构造数组; string[] Oristr = { "service=" + service, "partner=" + partner, "subject=" + subject, "body=" + body, "out_trade_no=" + out_trade_no, "total_fee=" + total_fee, "show_url=" + show_url, "payment_type=" + payment_type, "seller_email=" + seller_email, "notify_url=" + notify_url, "_input_charset=" + encoding, "return_url=" + return_url }; //进行排序; string[] Sortedstr = PaymentHelper.BubbleSort(Oristr); //构造待md5摘要字符串 ; StringBuilder prestr = new StringBuilder(2048); for (i = 0; i < Sortedstr.Length; i++) { if (i == Sortedstr.Length - 1) { prestr.Append(Sortedstr[i]); } else { prestr.Append(Sortedstr[i] + "&"); } } prestr.Append(key); //生成Md5摘要; string sign = PaymentHelper.GetMD5(prestr.ToString(), encoding); //构造支付Url; char[] delimiterChars = { '=' }; StringBuilder parameter = new StringBuilder(2048); parameter.Append(gateway); parameter.Append("?"); for (i = 0; i < Sortedstr.Length; i++) { parameter.Append(Sortedstr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1]) + "&"); } parameter.Append("sign=" + sign + "&sign_type=" + sign_type); //返回支付Url; return(parameter.ToString()); }