支付宝支付

 一.配置信息     (配置信息   发送参数  接收参数 )
1
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 2 3 // 合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 4 public static string partner = ""; 5 6 // 收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号 7 public static string seller_id = partner; 8 9 // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 10 public static string key = ""; 11 12 // 服务器异步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 13 public static string notify_url = "http://" + HttpContext.Current.Request.Url.Authority.ToLower() + "/api/alipaywap/notify_url.aspx"; 14 15 // 页面跳转同步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 16 public static string return_url = "http://" + HttpContext.Current.Request.Url.Authority.ToLower() + "/api/alipaywap/return_url.aspx"; 17 18 19 // 服务器异步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 20 public static string pcnotify_url = "http://" + HttpContext.Current.Request.Url.Authority.ToLower() + "/api/alipaypc/notify_url.aspx"; 21 22 // 页面跳转同步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 23 public static string pcreturn_url = "http://" + HttpContext.Current.Request.Url.Authority.ToLower() + "/api/alipaypc/return_url.aspx"; 24 25 26 27 // 签名方式 28 public static string sign_type = "MD5"; 29 30 // 调试用,创建TXT日志文件夹路径,见AlipayCore.cs类中的LogResult(string sWord)打印方法。 31 public static string log_path = HttpRuntime.AppDomainAppPath.ToString() + "log\\"; 32 33 // 字符编码格式 目前支持utf-8 34 public static string input_charset = "utf-8"; 35 36 // 支付类型 ,无需修改 37 public static string payment_type = "1"; 38 39 // 调用的接口名,无需修改 40 public static string service = "alipay.wap.create.direct.pay.by.user"/"即时到帐接口"; 41 42 //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 43 44 static Config() 45 { 46 Maticsoft.BLL.orderpay pay = new Maticsoft.BLL.orderpay(); 47 Maticsoft.Model.orderpay paymodel = pay.GetModel(1); 48 partner = paymodel.apiid; 49 key = paymodel.apikey; 50 seller_id = partner; 51 52 }
 1 //把请求参数打包成数组
 2             SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
 3             sParaTemp.Add("payment_type", "1"); //收款类型1商品购买
 4             sParaTemp.Add("show_url", "goods_info.html"); //商品展示地址
 5             sParaTemp.Add("out_trade_no", orderno); //网站订单号
 6             sParaTemp.Add("subject", "购物订单" + "_" + username); //订单名称
 7             sParaTemp.Add("body", username); //订单描述
 8             sParaTemp.Add("total_fee", payfee.ToString()); //订单总金额
 9             sParaTemp.Add("paymethod", ""); //默认支付方式
10             sParaTemp.Add("defaultbank", ""); //默认网银代号
11             sParaTemp.Add("anti_phishing_key", ""); //防钓鱼时间戳
12             sParaTemp.Add("exter_invoke_ip", Common.Iport.GetHostAddress()); ////获取客户端的IP地址
13             sParaTemp.Add("buyer_email", ""); //默认买家支付宝账号
14             sParaTemp.Add("royalty_type", "");
15             sParaTemp.Add("royalty_parameters", "");
16             sParaTemp.Add("service", "create_direct_pay_by_user");
17             sParaTemp.Add("partner", API.Alipay.Config.partner);
18             //增加基本配置
19             sParaTemp.Add("_input_charset", API.Alipay.Config.input_charset.ToLower());
20             sParaTemp.Add("return_url", API.Alipay.Config.pcreturn_url);
21             sParaTemp.Add("notify_url", API.Alipay.Config.pcnotify_url);
22 
24             //构造即时到帐接口表单提交HTML数据,无需修改
25             Service ali = new Service();
26             string sHtmlText = ali.Create_direct_pay_by_user(sParaTemp);
27             Response.Write(sHtmlText);
        /// <summary>
        /// 构造即时到帐接口
        /// </summary>
        /// <param name="sParaTemp">请求参数集合</param>
        /// <returns>表单提交HTML信息</returns>
        public string Create_direct_pay_by_user(SortedDictionary<string, string> sParaTemp)
        {
            sParaTemp.Add("seller_email", _email);

            //确认按钮显示文字
            string strButtonValue = "确认";
            //表单提交HTML数据
            string strHtml = "";

            //构造表单提交HTML数据
            strHtml = Submit.BuildFormHtml(sParaTemp, "https://mapi.alipay.com/gateway.do?", "get", strButtonValue);

            return strHtml;
        }
        /// <summary>
        /// 构造提交表单HTML数据
        /// </summary>
        /// <param name="sParaTemp">请求参数数组</param>
        /// <param name="gateway">网关地址</param>
        /// <param name="strMethod">提交方式。两个值可选:post、get</param>
        /// <param name="strButtonValue">确认按钮显示文字</param>
        /// <returns>提交表单HTML文本</returns>
        public static string BuildFormHtml(SortedDictionary<string, string> sParaTemp, string gateway, string strMethod, string strButtonValue)
        {
            //待请求参数数组
            Dictionary<string, string> dicPara = new Dictionary<string, string>();
            dicPara = BuildRequestPara(sParaTemp);

            StringBuilder sbHtml = new StringBuilder();

            sbHtml.Append("<form id='alipaysubmit' name='alipaysubmit' action='" + gateway + "_input_charset=" + _input_charset + "' method='" + strMethod.ToLower().Trim() + "'>");

            foreach (KeyValuePair<string, string> temp in dicPara)
            {
                sbHtml.Append("<input type='hidden' name='" + temp.Key + "' value='" + temp.Value + "'/>");
            }

            //submit按钮控件请不要含有name属性
            sbHtml.Append("<input type='submit' value='" + strButtonValue + "' style='display:none;'></form>");

            sbHtml.Append("<script>document.forms['alipaysubmit'].submit();</script>");

            return sbHtml.ToString();
        }
        /// <summary>
        /// 生成要请求给支付宝的参数数组
        /// </summary>
        /// <param name="sParaTemp">请求前的参数数组</param>
        /// <returns>要请求的参数数组</returns>
        private static Dictionary<string, string> BuildRequestPara(SortedDictionary<string, string> sParaTemp)
        {
            //待签名请求参数数组
            Dictionary<string, string> sPara = new Dictionary<string, string>();
            //签名结果
            string mysign = "";

            //过滤签名参数数组
            sPara = Core.FilterPara(sParaTemp);

            //获得签名结果
            mysign = Core.BuildMysign(sPara, _key, _sign_type, _input_charset);

            //签名结果与签名方式加入请求提交参数组中
            sPara.Add("sign", mysign);
            sPara.Add("sign_type", _sign_type);

            return sPara;
        }
        /// <summary>
        /// 除去数组中的空值和签名参数并以字母a到z的顺序排序
        /// </summary>
        /// <param name="dicArrayPre">过滤前的参数组</param>
        /// <returns>过滤后的参数组</returns>
        public static Dictionary<string, string> FilterPara(SortedDictionary<string, string> dicArrayPre)
        {
            Dictionary<string, string> dicArray = new Dictionary<string, string>();
            foreach (KeyValuePair<string, string> temp in dicArrayPre)
            {
                if (temp.Key.ToLower() != "sign" && temp.Key.ToLower() != "sign_type" && temp.Value != "" && temp.Value != null)
                {
                    dicArray.Add(temp.Key.ToLower(), temp.Value);
                }
            }

            return dicArray;
        }
        /// <summary>
        /// 生成签名结果
        /// </summary>
        /// <param name="sArray">要签名的数组</param>
        /// <param name="key">安全校验码</param>
        /// <param name="sign_type">签名类型</param>
        /// <param name="_input_charset">编码格式</param>
        /// <returns>签名结果字符串</returns>
        public static string BuildMysign(Dictionary<string, string> dicArray, string key, string sign_type, string _input_charset)
        {
            string prestr = CreateLinkString(dicArray);  //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串

            prestr = prestr + key;                      //把拼接后的字符串再与安全校验码直接连接起来
            string mysign = Sign(prestr, sign_type, _input_charset);    //把最终的字符串签名,获得签名结果

            return mysign;
        }

 

posted @ 2017-02-22 12:44  SSS.M.AAA  阅读(1192)  评论(0编辑  收藏  举报