+ -
当前位置:首页 → 问答吧 → 请教关于支付宝API的问题。。。。。。。。

请教关于支付宝API的问题。。。。。。。。

时间:2011-12-22

来源:互联网

C# code

 /// <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();
        }



官方给的DEMO。。
想知道为什么要拼一个表单出来...

作者: a346729576   发布时间: 2011-12-22

那是为了更加详细的说明每个参数的问题

作者: yesterday5100   发布时间: 2011-12-22

之前已经有个表单了。点击提交之后 就开始拼这些.. 难道是为了安全?
引用 1 楼 yesterday5100 的回复:

那是为了更加详细的说明每个参数的问题

作者: a346729576   发布时间: 2011-12-22

不管是支付宝还是财务通。它都有两种支付的方式get和post。而官方给你的demo。就是属于post提交。
你可以不用拼凑成表单。可以直接通过get过去。只要拼凑成对象的url就可以了。

作者: liuleiyu121520   发布时间: 2011-12-22


  //业务参数赋值;
  string gateway = "https://www.alipay.com/cooperate/gateway.do?"; //支付接口
  string service = "create_direct_pay_by_user"; //服务名称,这个是识别是何接口实现何功能的标识,请勿修改
   

  string seller_email = ConfigHandler.AlipaySellerEmail; //商家签约时的支付宝帐号,即收款的支付宝帐号
  string sign_type = "MD5"; //加密类型,签名方式“不用改”
  string key = ConfigHandler.AlipayKey; //安全校验码,与partner是一组,获取方式是:用签约时支付宝帐号登陆支付宝网站www.alipay.com,在商家服务我的商家里即可查到。
  string partner = ConfigHandler.AlipayPartner; //商户ID,合作身份者ID,合作伙伴ID
  string _input_charset = "gb2312"; //编码类型,完全根据客户自身的项目的编码格式而定,千万不要填错。否则极其容易造成MD5加密错误。

  string show_url = "http://fdc.soufun.com/"; //展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。
   
  string out_trade_no = orderID; //客户自己的订单号,订单号必须在自身订单系统中保持唯一性
  string subject = ""; //商品名称,也可称为订单名称,该接口并不是单一的只能买一样东西,可把一次支付当作一次下订单
  string body = ""; //商品描述,即备注
  string total_fee = cash.ToString("F2"); //商品价格,也可称为订单的总金额

  //服务器通知url(Alipay_Notify.aspx文件所在路经),必须是完整的路径地址
  string notify_url = ConfigHandler.AlipayNotify;
  //服务器返回url(Alipay_Return.aspx文件所在路经),必须是完整的路径地址
  string return_url = ConfigHandler.AlipayReturn;


  //构造数组;
  //以下数组即是参与加密的参数,若参数的值不允许为空,若该参数为空,则不要成为该数组的元素
  string[] para ={
  "service="+service,
  "partner=" + partner,
  "seller_email=" + seller_email,
  "out_trade_no=" + out_trade_no,
  "subject=" + subject,
  "body=" + body,
  "total_fee=" + total_fee, 
  "show_url=" + show_url,
  "payment_type=1",
  "notify_url=" + notify_url,
  "return_url=" + return_url
  };
  //支付URL生成
  string aliay_url = AliPay.CreatUrl(
  gateway,//GET方式传递参数时请去掉注释
  para,
  _input_charset,
  sign_type,
  key
  );

  //以下是GET方式传递参数
  Response.Redirect(aliay_url);


  //以下是POST方式传递参数
  //Response.Write("<form name='alipaysubmit' method='post' action='https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8'>");
  //Response.Write("<input type='hidden' name='service' value=" + service + ">");
  //Response.Write("<input type='hidden' name='partner' value=" + partner + ">");
  //Response.Write("<input type='hidden' name='seller_email' value=" + seller_email + ">");
  //Response.Write("<input type='hidden' name='out_trade_no' value=" + out_trade_no + ">");
  //Response.Write("<input type='hidden' name='subject' value=" + subject + ">");
  //Response.Write("<input type='hidden' name='body' value=" + body + ">");
  //Response.Write("<input type='hidden' name='total_fee' value=" + total_fee + ">");
  //Response.Write("<input type='hidden' name='show_url' value=" + show_url + ">");
  //Response.Write("<input type='hidden' name='return_url' value=" + return_url + ">");
  //Response.Write("<input type='hidden' name='notify_url' value=" + notify_url + ">");
  //Response.Write("<input type='hidden' name='payment_type' value=1>");
  //Response.Write("<input type='hidden' name='sign' value=" + aliay_url + ">");
  //Response.Write("<input type='hidden' name='sign_type' value=" + sign_type + ">");
  //Response.Write("</form>");
  //Response.Write("<script>");
  //Response.Write("document.alipaysubmit.submit()");
  //Response.Write("</script>");

作者: liuleiyu121520   发布时间: 2011-12-22

其实还是给支付宝传递几个参数过去,然后他再给你返回一些东西。。我发的那段代码是post方式,我只用get提交过去就行了。。是吗大哥
引用 3 楼 liuleiyu121520 的回复:

不管是支付宝还是财务通。它都有两种支付的方式get和post。而官方给你的demo。就是属于post提交。
你可以不用拼凑成表单。可以直接通过get过去。只要拼凑成对象的url就可以了。

作者: a346729576   发布时间: 2011-12-22

最好还是post提交 安全性高一点 支付宝也是这样建议的

作者: zx75991   发布时间: 2011-12-22

谁能大概的讲一下支付宝的流程... 

首先把参数都加密传过去 然后支付宝返回回来一个SortedDictionary 记录着信息 大概是这样吧???

作者: a346729576   发布时间: 2011-12-22

把需要的参数设置下,必要的参数post过去
然后设置下return_url页面,确定支付状态后的跳转页面.
接口集成到你的网站

作者: zx75991   发布时间: 2011-12-22

引用 7 楼 a346729576 的回复:
谁能大概的讲一下支付宝的流程...

首先把参数都加密传过去 然后支付宝返回回来一个SortedDictionary 记录着信息 大概是这样吧???


先是参数中有一个return_url。还有一个Notify_url 。你提交到他/她的页面去了。成功之后会自动跳转到你的retur_url页面。同时支付宝会异步的访问Notify_url通知页面。大约是30分钟6次还是几次来着。如果到通知页面成功后得返回一个success失败就返回一个fail。当支付接受到success就不会再返回你这个通知页面了。如果接受到的是fail。那它会通过30分钟6次左右的频率访问你的通知页面。直到成功为止。

作者: liuleiyu121520   发布时间: 2011-12-22

return_url.aspx、、notify_url.aspx、、default.aspx 这三个页面都要吗?
引用 8 楼 zx75991 的回复:

把需要的参数设置下,必要的参数post过去
然后设置下return_url页面,确定支付状态后的跳转页面.
接口集成到你的网站

作者: a346729576   发布时间: 2011-12-22

引用 7 楼 a346729576 的回复:

谁能大概的讲一下支付宝的流程...

首先把参数都加密传过去 然后支付宝返回回来一个SortedDictionary 记录着信息 大概是这样吧???


首先把参数都加密传过去,最主要的是价钱,还有本地数据库中的订单号,还有返回地址,比如http://www.aaa.com/notify_url.aspx。

提交的时候一般使用Post方式,比较安全。当然pid和key这两个参数是必须的,少不了的,否则都进不了支付宝。

当支付宝处理完成后,会把处理结果返回给notify_url.aspx,return_url.aspx。之前你传过去的所有东西,他会一成不变的传回来,接收到你之前传过去的数据库中的订单号,在这个页面notify_url.aspx判断一下结果,如果成功就更新自己的数据库对应的订单,失败就做其他处理。

作者: yesterday5100   发布时间: 2011-12-22

相关阅读 更多