Beispiel #1
0
        /// <summary>
        /// 构成URL参数的sign值
        /// </summary>
        /// <param name="dic">参数的字典集合</param>
        /// <param name="key">安全校验码</param>
        /// <returns>返回sign的值</returns>
        /// <remarks>参与加密的参数存入Dictionary,参数的值不允许为空,若该参数为空,不要把这个参数加到Dictionary集合里面</remarks>
        public static string GetSign(Dictionary <string, string> dic, string key)
        {
            //构造数组
            string[] Oristr = new string[dic.Count];
            int      ct     = 0;

            foreach (KeyValuePair <string, string> entry in dic)
            {
                if (!String.IsNullOrEmpty(entry.Value))
                {
                    Oristr[ct] = entry.Key + "=" + entry.Value;
                    ct++;
                }
            }
            //进行排序
            string[] Sortedstr = Alipay.BubbleSort(Oristr);

            //构造待md5摘要字符串
            System.Text.StringBuilder prestr = new System.Text.StringBuilder();

            for (int i = 0; i < Sortedstr.Length; i++)
            {
                if (i == Sortedstr.Length - 1)
                {
                    prestr.Append(Sortedstr[i]);
                }
                else
                {
                    prestr.Append(Sortedstr[i] + "&");
                }
            }
            prestr.Append(key);//追加key
            //生成Md5摘要
            return(Alipay.GetMD5(prestr.ToString(), _Input_Charset));
        }
Beispiel #2
0
        /// <summary>
        /// 构造高级即时到账接口sign
        /// </summary>
        /// <param name="out_trade_no">客户自己的订单号,订单号必须在订单系统中保持唯一性</param>
        /// <param name="subject">商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单</param>
        /// <param name="body">商品描述,即备注</param>
        /// <param name="total_fee">商品价格,也可称为订单的总金额 0.01-50000.00</param>
        /// <param name="return_url">返回通知url,必须是完整的路径地址,错误或不正确会收不到通知</param>
        /// <param name="notify_url">服务器通知url,必须是完整的路径外网地址,内网ip或不正确的地址会导致收不到通知</param>
        /// <param name="qr_pay_mode">是否扫码支付 1:订单码-前置模式 2:订单码-跳转模式 默认为空表示不使用扫码支付</param>
        /// <returns>生成的URL签名</returns>
        /// <remarks>注意传入的参数不能为空</remarks>
        public string CreateDirectPayByUser(string out_trade_no, string subject, string body, string total_fee, string return_url, string notify_url, string qr_pay_mode = "")
        {
            //扩展功能参数——防钓鱼//

            //防钓鱼时间戳
            string anti_phishing_key = Query_timestamp();  //获取防钓鱼时间戳函数
            //获取客户端的IP地址,建议:编写获取客户端IP地址的程序
            string exter_invoke_ip = IpManager.IPAddress;
            //注意:
            //请慎重选择是否开启防钓鱼功能
            //exter_invoke_ip、anti_phishing_key一旦被设置过,那么它们就会成为必填参数
            //建议使用POST方式请求数据
            //示例:
            //exter_invoke_ip = "";
            //Service aliQuery_timestamp = new Service();

            Dictionary <string, string> dic = new Dictionary <string, string>();

            dic.Add("service", "create_direct_pay_by_user");//服务名称,这个是识别是何接口实现何功能的标识,请勿修改
            dic.Add("partner", AlipayConfig.Partner);
            dic.Add("_input_charset", Alipay._Input_Charset);
            dic.Add("seller_email", AlipayConfig.Seller_Email);
            dic.Add("out_trade_no", out_trade_no);
            dic.Add("subject", subject);
            dic.Add("body", body);
            dic.Add("total_fee", total_fee);
            dic.Add("payment_type", "1");
            dic.Add("return_url", return_url);
            dic.Add("notify_url", notify_url);
            dic.Add("qr_pay_mode", qr_pay_mode);
            dic.Add("anti_phishing_key", anti_phishing_key);
            dic.Add("exter_invoke_ip", exter_invoke_ip);
            return(Alipay.AlipayDoGet(dic, AlipayConfig.Key));
        }
Beispiel #3
0
        /// <summary>
        /// 构造md5签名字符串
        /// </summary>
        /// <param name="nvc">NameValues集合</param>
        /// <param name="key">安全校验码</param>
        /// <returns>返回排序后的字符串(自动剔除末尾的sign和sign_type类型)</returns>
        private string BuildSignString(System.Collections.Specialized.NameValueCollection nvc, string key)
        {
            string[]      Sortedstr = Alipay.BubbleSort(nvc.AllKeys); //对参数进行排序
            StringBuilder prestr    = new StringBuilder();            //构造待md5摘要字符串

            for (int i = 0; i < Sortedstr.Length; i++)
            {
                if (nvc.Get(Sortedstr[i]) != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type")
                {
                    if (i == Sortedstr.Length - 1)
                    {
                        prestr.Append(Sortedstr[i] + "=" + nvc.Get(Sortedstr[i]));
                    }
                    else
                    {
                        prestr.Append(Sortedstr[i] + "=" + nvc.Get(Sortedstr[i]) + "&");
                    }
                }
            }
            prestr.Append(key);//追加key
            return(prestr.ToString());
        }
Beispiel #4
0
 /// <summary>
 /// 将返回的URL生成Md5摘要
 /// </summary>
 /// <param name="coll">NameValues集合,通过Request.QueryString或Request.Form方式取得</param>
 /// <returns>返回sign串</returns>
 public string GetMD5Sign(System.Collections.Specialized.NameValueCollection coll)
 {
     return(Alipay.GetMD5(BuildSignString(coll, AlipayConfig.Key), Alipay._Input_Charset));
 }