支付宝手机页面支付功能的代码详解:
页面一:发起支付
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using mon;
using DTcms.DBUtility;
using mon.Data.SQLServer;
using mon.Request;
using DTcms.API.Payment.alipaymb;
namespace DTcms.Web.dev
{
///
/// 用户绑定类
///
//alipay1 这个类可以自定义 必须和上面保持一致
public class alipaymb : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//业务逻辑放在这里
//业务逻辑放在这里
//发起支付s
//读取站点配置信息
Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig();
//===============================建立请求==================================
string GATEWAY_NEW = "/service/rest.htm?"; //支付宝网关地址
string format = "xml"; //返回格式,必填,不需要修改
string v = "2.0"; //必填,不需要修改
string req_id = DateTime.Now.ToString("yyyyMMddHHmmss"); //必填,须保证每次请求都是唯一
string order_no = "C" + req_id;
string Notify_url = "/dev/alipaymb_notify_url.ashx";//业务逻辑地址
string Return_url = "/dev/alipaymb_return_url.ashx";//成功通知地址
string subject = "";//标题
string order_amount = context.Request["order_amount"];//金额
//请求业务参数详细,必填
string req_dataToken = "" + Notify_url + ""
+ Return_url + "" + Config.Seller_email + ""
+ order_no + "" + siteConfig.webname + "-" + subject + "" + order_amount.ToString()
+ "";
//把请求参数打包成数组
Dictionary sParaTempToken = new Dictionary();
sParaTempToken.Add("partner", Config.Partner);
sParaTempToken.Add("_input_charset", Config.Input_charset.ToLower());
sParaTempToken.Add("sec_id", Config.Sign_type.ToUpper());
sParaTempToken.Add("service", "alipay.wap.trade.create.direct");
sParaTempToken.Add("format", format);
sParaTempToken.Add("v", v);
sParaTempToken.Add("req_id", req_id);
sParaTempToken.Add("req_data", req_dataToken);
//建立请求
string sHtmlTextToken = Submit.BuildRequest(GATEWAY_NEW, sParaTempToken);
//URLDECODE返回的信息
System.Text.Encoding code = System.Text.Encoding.GetEncoding(Config.Input_charset);
sHtmlTextToken = HttpUtility.UrlDecode(sHtmlTextToken, code);
//解析远程模拟提交后返回的信息
Dictionary dicHtmlTextToken = Submit.ParseResponse(sHtmlTextToken);
//获取token
string request_token = dicHtmlTextToken["request_token"];
//业务详细,必填
string req_data = "" + request_token + "";
//把请求参数打包成数组
Dictionary sParaTemp = new Dictionary();
sParaTemp.Add("partner", Config.Partner);
sParaTemp.Add("_input_charset", Config.Input_charset.ToLower());
sParaTemp.Add("sec_id", Config.Sign_type.ToUpper());
sParaTemp.Add("service", "alipay.wap.auth.authAndExecute");
sParaTemp.Add("format", format);
sParaTemp.Add("v", v);
sParaTemp.Add("req_data", req_data);
//建立请求
string sHtmlText = Submit.BuildRequest(GATEWAY_NEW, sParaTemp, "get", "确认");
context.Response.Write(sHtmlText);
//发起支付e
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
页面二:通知页面
//上面这个wxnetpaysend 可以自定义
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Web;
using System.Web.SessionState;
using System.IO;
using System.Xml;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using mon;
using DTcms.DBUtility;
using mon.Data.SQLServer;
using mon.Request;
using DTcms.API.Payment.alipaymb;
namespace DTcms.Web.dev
{
///
/// 用户绑定类
///
//wxnetpaysend 这个类可以自定义 必须和上面保持一致
public class alipaymb_notify_url : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
Dictionary sPara = GetRequestPost(context);
if (sPara.Count > 0)//判断是否有带返回参数
{
Notify aliNotify = new Notify();
bool verifyResult = aliNotify.VerifyNotify(sPara, context.Request.Form["sign"]);
if (verifyResult)//验证成功
{
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(sPara["notify_data"]);
string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText; //支付宝交易号
string order_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText; //商户订单号
string total_fee = xmlDoc.SelectSingleNode("/notify/total_fee").InnerText; //获取总金额
string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText; //交易状态
if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS" || trade_status == "success")
{
//业务逻辑写在这里s
System.IO.File.AppendAllText(Utils.GetMapPath("alipaymblog.txt"), "接口类型:支付宝手机wap支付,支付宝交易订单号:"+trade_no+"商户订单号:"+order_no+"总金额:"+total_fee+"支付状态:"+trade_status+"\n", System.Text.Encoding.UTF8);
//业务逻辑写在这里e
//context.Response.Write("success"); //请不要修改或删除
return;
}
else
{
context.Response.Write(trade_status);
}
}
catch (Exception ex)
{
context.Response.Write(ex.ToString());
}
}
else //验证失败
{
context.Response.Write("fail");
}
}
else
{
context.Response.Write("无通知参数");
}
}
///
/// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
///
/// request回来的信息组成的数组
public Dictionary GetRequestPost(HttpContext context)
{
int i = 0;
Dictionary sArray = new Dictionary();
NameValueCollection coll;
coll = context.Request.Form;
String[] requestItem = coll.AllKeys;
for (i = 0; i < requestItem.Length; i++)
{
sArray.Add(requestItem[i], context.Request.Form[requestItem[i]]);
}
return sArray;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
页面三:逻辑业务处理页面
//上面这个wxnetpaysend 可以自定义
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Web;
using System.Web.SessionState;
using System.IO;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using mon;
using DTcms.DBUtility;
using mon.Data.SQLServer;
using mon.Request;
using DTcms.API.Payment.alipaymb;
namespace DTcms.Web.dev
{
///
/// 用户绑定类
///
//wxnetpaysend 这个类可以自定义 必须和上面保持一致
public class alipaymb_return_url : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
//读取站点配置信息
Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig();
Dictionary sPara = GetRequestGet(context);
if (sPara.Count > 0)//判断是否有带返回参数
{
Notify aliNotify = new Notify();
bool verifyResult = aliNotify.VerifyReturn(sPara, context.Request.QueryString["sign"]);
if (verifyResult)//验证成功
{
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
string trade_no = DTRequest.GetString("trade_no"); //支付宝交易号
string order_no = DTRequest.GetString("out_trade_no"); //获取订单号
string result = DTRequest.GetString("result");//交易状态
if (result == "TRADE_FINISHED" || result == "TRADE_SUCCESS" || result=="success")
{
//成功状态
context.Response.Write("
支付成功!订单号:" + order_no + "
");return;
}
}
}
//失败状态
context.Response.Write("
支付失败!
");return;
}
///
/// 获取支付宝GET过来通知消息,并以“参数名=参数值”的形式组成数组
///
/// request回来的信息组成的数组
public Dictionary GetRequestGet(HttpContext context)
{
int i = 0;
Dictionary sArray = new Dictionary();
NameValueCollection coll;
coll = context.Request.QueryString;
String[] requestItem = coll.AllKeys;
for (i = 0; i < requestItem.Length; i++)
{
sArray.Add(requestItem[i], context.Request.QueryString[requestItem[i]]);
}
return sArray;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
如果觉得《手机版支付宝html页面 支付宝手机网页支付代码》对你有帮助,请点赞、收藏,并留下你的观点哦!