ASP.NET支付宝扫码即时到账支付开发流程(上)

时间:2021-02-14 03:23:17

  支付宝扫码支付方式,说简单也简单,只要是对接过支付宝接口的朋友,再做支付宝扫码,可以说是非常的简单,因为根本就没有变多了,相对来说,反而更简单了些,下面就让我来详细的给大家演示一下开发过程。

首先,当我们拿到开发包的时候,开发包下载:支付宝扫码支付即时到账开发包 

请看下图:

ASP.NET支付宝扫码即时到账支付开发流程(上)

    大概就这么多的文件,我们找到code_demo文件夹里面的alipay.mobile.qrcode.manage-CSHARP的demo,可以参考一下,然后开始做我们自己的开发。
    一般来说,对接支付方式就是按照他们的要求格式将所需的数据推送给他们,然后他们会返回给商户一些请求结果,商户根据返回的结果做相应的逻辑处理。

    支付宝二维码开发的步骤也是如此,按照支付宝开发文档上的步骤来,第一步就是商户生成二维码,商户生成二维码的过程需要我们根据支付宝提供的接口规则,构造要传输给支付宝的数据集合,然后通过页面链接跳转或表单提交的方式传递给支付宝;然后支付宝会对请求的数据进行处理,经过一系列验证通过后便会处理完成这次发送过来的数据请求,对于处理完成的交易,支付宝会以某种形式的数据反馈给我们的网站程序。

    首先是构造请求数据和处理支付宝返回数据:

 

      protected void Page_Load(object sender, EventArgs e) { string orderNo = Request.QueryString["no"];//订单号 if (string.IsNullOrEmpty(orderNo)) { Response.Write("订单编号错误!"); return; } //取得要支付的金额 decimal totalPrice = decimal.Parse(Request.QueryString["Total"]); ////////////////////////////////////////////请求参数//////////////////////////////////////////// //接口调用时间 格式为:yyyy-MM-dd HH:mm:ss string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //动作 string method = "add"; //创建商品二维码 //业务类型 string biz_type = "10"; //json数据 string biz_data = GetBizData(orderNo,totalPrice); //把请求参数打包成数组 SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>(); sParaTemp.Add("service", "alipay.mobile.qrcode.manage"); sParaTemp.Add("partner", Config.Partner); sParaTemp.Add("_input_charset", Config.Input_charset.ToLower()); sParaTemp.Add("timestamp", timestamp); sParaTemp.Add("method", method); sParaTemp.Add("biz_type", biz_type); sParaTemp.Add("biz_data", biz_data); string _sign = ""; foreach (var item in sParaTemp.OrderBy(s => s.Key)) { _sign = appendParam(_sign, item.Key, item.Value); } //签名 string sign = AlipayMD5.Sign(_sign, Config.Key, Config.Input_charset.ToLower()); sParaTemp.Add("sign_type", Config.Sign_type); sParaTemp.Add("sign", sign); //建立请求 string sHtmlText = Submit.BuildRequest(sParaTemp); //请在这里加上商户的业务逻辑程序代码 XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(sHtmlText); XmlNode root = xmlDoc.DocumentElement;//返回的根节点 string is_success = root.SelectSingleNode("is_success").InnerText; if (is_success == "T") { string result_code = root.SelectSingleNode("/alipay/response/alipay/result_code").InnerText; if (result_code == "SUCCESS") { string qrcode = root.SelectSingleNode("/alipay/response/alipay/qrcode").InnerText;//二维码地址 string qrcode_img_url = root.SelectSingleNode("/alipay/response/alipay/qrcode_img_url").InnerText;//二维码图片地址 //显示二维码 Response.Redirect("/CreateQRCode.aspx?URL=" + qrcode_img_url + "&orderno=" + orderNo + "&cashm=" + totalPrice); } else { Response.Write("业务处理失败!"); } } else { Response.Write("请求失败!"); } } catch { Response.Write("系统异常!"); } }

其中在拼接biz_data数据的时候,商户可根据情况来取舍,有些数据不用传(看文档要求)


ASP.NET支付宝扫码即时到账支付开发流程(上)

 

       /// <summary> /// 获取json数据 /// </summary> /// <param name="orderModel"></param> /// <returns></returns> private string GetBizData(string OrderNo,decimal price) { StringBuilder sbJson = new StringBuilder(); //有些数据不必传 sbJson.Append("{"); sbJson.AppendFormat("\"need_address\":\"{0}\",", "F");//是否需要收货地址:T需要,F不需要 sbJson.AppendFormat("\"trade_type\":\"{0}\",", "1");//交易类型,1 即时到账 sbJson.AppendFormat("\"notify_url\":\"{0}\",", "http://www.xxxxx.com/OnlinePay/AlipayQRCode/Notify_Url.aspx"); string goods = "\"goods_info\":{\"id\":\"" + OrderNo + "\",\"name\":\"" + OrderNo + "\",\"price\":\""+price+ "\"}"; sbJson.Append(goods); //sbJson.AppendFormat("\"memo\":{0}", "memo");备注 sbJson.Append("}"); return sbJson.ToString(); }


把正确的数据发送给支付宝服务器之后,支付宝对商户提供的请求数据进行处理后,返回给商户结果数据,以便商户根据数据进一步处理(生成二维码)
在建立请求这一步完成之后,即下面这一步:
string sHtmlText = Submit.BuildRequest(sParaTemp);
执行完了之后,服务器返回的正确的XML形式是这样的:


 

                <?xml version="1.0" encoding="utf-8"?> <alipay> <is_success>T</is_success> <request> <param name="sign">e4886e6ac2bdd177780291cac8275549</param> <param name="timestamp">2015-04-09 18:02:02</param> <param name="_input_charset">utf-8</param> <param name="biz_type">10</param> <param name="biz_data">{"need_address":"F","trade_type":"1","notify_url":"http://www.xxxxx.com/OnlinePay/AlipayQRCode/Notify_Url.aspx","goods_info":{"id":"130723565644339531","name":"130723565644339531","price":"58.90"}}</param> <param name="sign_type">MD5</param> <param name="service">alipay.mobile.qrcode.manage</param> <param name="method">add</param> <param name="partner">2088212334266517</param> </request> <response> <alipay> <qrcode>https://qr.alipay.com/gdcb3cplbcwmsu142b</qrcode> <qrcode_img_url>https://mobilecodec.alipay.com/show.htm?code=gdcb3cplbcwmsu142b&anp;picSize=S</qrcode_img_url> <result_code>SUCCESS</result_code> </alipay> </response> <sign>f30b5b091676cefdcbc1c67b04463178</sign> <sign_type>MD5</sign_type> </alipay>

至于其他情况返回的数据,请看文档中5.3,上面有详细的说明。
返回的数据中,在:

                    <response> <alipay> <qrcode>https://qr.alipay.com/gdcb3cplbcwmsu142b</qrcode> <qrcode_img_url>https://mobilecodec.alipay.com/show.htm?code=gdcb3cplbcwmsu142b&anp;picSize=S</qrcode_img_url> <result_code>SUCCESS</result_code> </alipay> </response>

里面就是二维码图片的链接地址和二维码的地址,然后我们就可以通过将二维码图片的地址提取出来,然后赋值到一个图片标签的src属性上即能显示出二维码图片了
//显示二维码
Response.Redirect("/CreateQRCode.aspx?URL=" + qrcode_img_url + "&orderno=" +orderNo + "&cashm=" + totalPrice);


CreateQRCode.aspx页面中代码:

ASP.NET支付宝扫码即时到账支付开发流程(上)
ASP.NET支付宝扫码即时到账支付开发流程(上)

展示效果图为:

ASP.NET支付宝扫码即时到账支付开发流程(上)
至此,二维码生成!在用户扫描了二维码之后,支付宝服务器会将用户的交易结果返回给我们处理,我会在下一篇博客详细的说明。


开发包下载:http://www.7qizhi.com/resource-25.html

Demo下载:http://www.7qizhi.com/resource-37.html