支付宝支付 - 电脑网站支付
目录
1. 支付宝支付 - 配置
2. 支付宝支付 - 电脑网站支付
一、引用dll
二、发起支付
/// <summary>
/// 支付
/// </summary>
/// <param name="aliMsg">支付宝信息</param>
/// <param name="totalAmount">金额,金额需要大于0</param>
/// <param name="tradeno">订单号,订单号不能重复,建议使用日期</param>
/// <returns></returns>
public static dynamic Pay(AlipayViewModel aliMsg, string totalAmount, string tradeno)
{string app_id = aliMsg.Alipay_app_id;string gatewayUrl = "https://openapi.alipay.com/gateway.do";string private_key = aliMsg.Alipay_private_key;string alipay_public_key = "^";string sign_type = aliMsg.Alipay_sign_type;string charset = aliMsg.Alipay_charset;DefaultAopClient client = new DefaultAopClient(gatewayUrl, app_id, private_key, "json", "1.0", sign_type, alipay_public_key, charset, false);//组装业务参数modelAlipayTradePagePayModel model = new AlipayTradePagePayModel();model.Body = "店"; // 商品描述model.Subject = ""; // 订单名称model.TotalAmount = totalAmount; // 付款金额model.OutTradeNo = tradeno; //外部订单号,商户网站订单系统中唯一的订单号model.ProductCode = "FAST_INSTANT_TRADE_PAY";AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();// 设置同步回调地址request.SetReturnUrl(ConfigurationManager.AppSettings["web_url"] + "AlipayPay/GetReturnPost");// 设置异步通知接收地址request.SetNotifyUrl(ConfigurationManager.AppSettings["web_url"] + "AlipayPay/GetAsynchronousPost");//将业务model载入到requestrequest.SetBizModel(model);AlipayTradePagePayResponse response = null;var url = "";try{response = client.pageExecute(request, null, "post");url = response.Body;return url;}catch (Exception exp){return "";}
}
- 同步回调:用户扫码后,自动执行同步回调的地址
- 异步回调:用户扫码后,支付宝自动执行,当同步回调无法成功执行时,异步回调是另一个保证
2.1 前端执行返回,显示支付宝扫码界面
<script>
$("body").html(decodeURI(res.Data));
</script>
三、同步回调
/// <summary>
/// 支付宝同步回调通知
/// </summary>
/// <returns></returns>
public bool GetReturnPost()
{try{// 格式化参数Dictionary<string, string> sArray = GetRequestGet();if (sArray.Count != 0){// 验签 传 支付宝信息 和 参数bool flag = CheckSign(aliMsg, sArray);if (!flag){// 错误:验签失败return false;}var trade_no = sArray["trade_no"]; // 支付宝交易号var out_trade_no = sArray["out_trade_no"]; // 获取订单号var total_amount = Convert.ToDecimal(sArray["total_amount"]); // 获取总金额// 订单查询AlipayTradeQueryResponseViewModel traceState = GetTraceMsg(aliMsg, out_trade_no, trade_no);...}else{// 错误:没有参数return false;}}catch (Exception ex){// 错误:ex.Messagereturn false;}
}/// <summary>
/// 获取支付宝GET过来通知消息,并以“参数名=参数值”的形式组成数组
/// </summary>
/// <returns>request回来的信息组成的数组</returns>
public Dictionary<string, string> GetRequestGet()
{int i = 0;Dictionary<string, string> sArray = new Dictionary<string, string>();NameValueCollection coll;//Load Form variables into NameValueCollection variable.coll = Request.QueryString;// Get names of all forms into a string array.String[] requestItem = coll.AllKeys;for (i = 0; i < requestItem.Length; i++){sArray.Add(requestItem[i], Request.QueryString[requestItem[i]]);}return sArray;
}/// <summary>
/// 支付宝支付检验
/// </summary>
/// <param name="aliMsg">支付宝信息</param>
/// <param name="sArray">参数信息</param>
/// <returns></returns>
public static bool CheckSign(AlipayViewModel aliMsg, Dictionary<string, string> sArray)
{var Alipay_alipay_public_key2 = aliMsg.Alipay_alipay_public_key2; // 支付宝公钥var Alipay_charset = "UTF-8"; // 编码格式var Alipay_sign_type = "RSA2"; // 加密格式return AlipaySignature.RSACheckV1(sArray, Alipay_alipay_public_key2 , Alipay_charset, Alipay_sign_type, false);
}/// <summary>
/// 获取订单信息
/// </summary>
/// <param name="aliMsg">支付宝信息</param>
/// <param name="out_trade_no">支付宝交易号</param>
/// <param name="trade_no">订单号</param>
/// <returns></returns>
public static dynamic GetTraceMsg(AlipayViewModel aliMsg, string out_trade_no, string trade_no)
{string app_id = aliMsg.Alipay_app_id;string gatewayUrl = "https://openapi.alipay.com/gateway.do";string private_key = aliMsg.Alipay_private_key;string alipay_public_key = "";string sign_type = aliMsg.Alipay_sign_type;string charset = aliMsg.Alipay_charset;IAopClient client = new DefaultAopClient(gatewayUrl, app_id, private_key, "json", "1.0", sign_type, alipay_public_key, charset, false);Dictionary<string, string> biz = new Dictionary<string, string>();biz.Add("out_trade_no", out_trade_no);biz.Add("trade_no", trade_no);AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.BizContent = JsonConvert.SerializeObject(biz);AlipayTradeQueryResponse response = client.Execute(request);return response.Body;
}
四、异步回调
/// <summary>
/// 支付宝异步回调通知
/// </summary>
/// <returns></returns>
public void GetAsynchronousPost()
{try{// 格式化参数Dictionary<string, string> sArray = GetRequestPost();if (sArray.Count != 0){// 验签 传 支付宝信息 和 参数bool flag = CheckSign(aliMsg, sArray);if (!flag){// 错误:验签失败return false;}var trade_no = sArray["trade_no"]; // 支付宝交易号var out_trade_no = sArray["out_trade_no"]; // 获取订单号var total_amount = Convert.ToDecimal(sArray["total_amount"]); // 获取总金额// 订单查询AlipayTradeQueryResponseViewModel traceState = GetTraceMsg(aliMsg, out_trade_no, trade_no);...}else{// 错误:没有参数return false;}}catch (Exception ex){// 错误:ex.Messagereturn false;}
}/// <summary>
/// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
/// </summary>
/// <returns>request回来的信息组成的数组</returns>
public Dictionary<string, string> GetRequestPost(HttpRequestBase request)
{int i = 0;Dictionary<string, string> sArray = new Dictionary<string, string>();NameValueCollection coll;coll = request.Form;String[] requestItem = coll.AllKeys;for (i = 0; i < requestItem.Length; i++){sArray.Add(requestItem[i], request.Form[requestItem[i]]);}return sArray;
}/// <summary>
/// 支付宝支付检验
/// </summary>
/// <param name="aliMsg">支付宝信息</param>
/// <param name="sArray">参数信息</param>
/// <returns></returns>
public static bool CheckSign(AlipayViewModel aliMsg, Dictionary<string, string> sArray)
{var Alipay_alipay_public_key2 = aliMsg.Alipay_alipay_public_key2; // 支付宝公钥var Alipay_charset = "UTF-8"; // 编码格式var Alipay_sign_type = "RSA2"; // 加密格式return AlipaySignature.RSACheckV1(sArray, Alipay_alipay_public_key2 , Alipay_charset, Alipay_sign_type, false);
}/// <summary>
/// 获取订单信息
/// </summary>
/// <param name="aliMsg">支付宝信息</param>
/// <param name="out_trade_no">支付宝交易号</param>
/// <param name="trade_no">订单号</param>
/// <returns></returns>
public static dynamic GetTraceMsg(AlipayViewModel aliMsg, string out_trade_no, string trade_no)
{string app_id = aliMsg.Alipay_app_id;string gatewayUrl = "https://openapi.alipay.com/gateway.do";string private_key = aliMsg.Alipay_private_key;string alipay_public_key = "";string sign_type = aliMsg.Alipay_sign_type;string charset = aliMsg.Alipay_charset;IAopClient client = new DefaultAopClient(gatewayUrl, app_id, private_key, "json", "1.0", sign_type, alipay_public_key, charset, false);Dictionary<string, string> biz = new Dictionary<string, string>();biz.Add("out_trade_no", out_trade_no);biz.Add("trade_no", trade_no);AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.BizContent = JsonConvert.SerializeObject(biz);AlipayTradeQueryResponse response = client.Execute(request);return response.Body;
}
五、代码下载
https://github.com/kosmos1991/Alipay
支付宝支付 - 电脑网站支付相关推荐
- php支付宝系列之电脑网站支付,一个PHP文件搞定支付宝之电脑网站支付
本篇文章给大家分享的内容是关于用一个PHP文件搞定支付宝之电脑网站支付 ,有需要的朋友可以参考一下 网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文 ...
- SpringBoot整合支付宝之电脑网站支付
SpringBoot整合支付宝之电脑网站支付 一.支付宝介绍 1.2 过程分析 1.3 对接支付宝的准备工作 1.4 申请步骤: 2.支付功能实现 2.1 思路分析 2.2 编写支付宝支付接口 2.2 ...
- PHP开发支付宝之电脑网站支付--流程简介
前言 前端时间自己开发了一个drupal的支付宝模块,现在整理一下过程,因为支付宝官方网站提供的接口及文档都是新接口的,而且使用新接口的过程比较麻烦一点,所以整理一下 1.支付宝的账号必须经过企业资格 ...
- 支付宝系列-电脑网站支付
1.概念 电脑网站支付,也称扫码支付,是专门针对PC端业务而开发的一种支付方式,既有支付宝提供在网页展示一个动态生成的支付二维码,用户通过手机支付宝扫码以后可实现支付功能的一种支付方式. 2.创建应用 ...
- 支付宝支付-电脑网站支付
官方文档 支付接口(alipay.trade.page.pay): 商户系统请求支付宝接口alipay.trade.page.pay,支付宝对商户请求参数进行校验,而后重定向至用户登录页面. 用户确认 ...
- 支付宝支付-电脑网站支付开发
公司产品需要做一个订单系统,需要在线下单支付功能,由于时间紧,任务重,选择了阿里的电脑网站支付作为支付的手段接入.一定要区分阿里的扫码支付和电脑网站支付的区别,刚开始我就搞混了.网站支付的页面类似于下 ...
- Java之支付宝支付(电脑网站支付)沙箱测试版
支付宝支付流程及注意事项(沙箱测试版) 一:支付宝支付接入准备工作: 首先,支付宝支付和微信支付意愿,都是只支持企业用户,个人用户是不能接入支付宝支付的,所以要想接入支付宝支付,首先需要有支付宝的企业 ...
- 支付宝之电脑网站支付(保姆版)
大家好,我是大史兄弟,一个不断摸索爬行的程序员.看CSND文章已经有好多年了,但是写文章还是第一次.我不是行业的大牛,只是一个希望不断进步成为大牛的小白程序员. 不知道有没有和我一样情况的,学 ...
- 接入支付宝电脑网站支付实现JAVA版
简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址,因为我这些服务天天在更新,而我的文章是教大家方法,而让你不是照葫芦画瓢 ...
最新文章
- c语言求两者之间最小数,C语言课件第2章基本数据类型.ppt
- python:collections模块
- Windows服务器安全设置经验详谈
- Spring Cloud Config采用数据库存储配置内容【Edgware+】
- 项目Alpha冲刺--9/10
- 18 Python 模块引入
- 一道实用linux运维问题的9种shell解答方法!
- shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断
- 方舟服务器炸了怎么修复,《方舟:生存进化》诸事不顺!退款BUG修复服务器又炸...
- 今天小暑是什么时间_小暑时间是什么?代表什么?
- 论述:企业如何做好网络营销推广
- python程序设计机械工业出版社课后答案-Python 3程序设计基础
- 2018计算机网络MOOC第一章作业1
- 钉钉企业内部开发工具配置
- 一个关于视频播放的小项目
- 欧姆龙PLC远程上下载实际操作分享
- 小程序页面传值传递对象[Object Object]
- Prometheus启动成功访问页面显示Service Unavailable
- 求解全局优化问题的改进灰狼算法
- 雅致古典山水中国风PPT模板