Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        /// <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());
        }