目录

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

支付宝支付 - 电脑网站支付相关推荐

  1. php支付宝系列之电脑网站支付,一个PHP文件搞定支付宝之电脑网站支付

    本篇文章给大家分享的内容是关于用一个PHP文件搞定支付宝之电脑网站支付 ,有需要的朋友可以参考一下 网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文 ...

  2. SpringBoot整合支付宝之电脑网站支付

    SpringBoot整合支付宝之电脑网站支付 一.支付宝介绍 1.2 过程分析 1.3 对接支付宝的准备工作 1.4 申请步骤: 2.支付功能实现 2.1 思路分析 2.2 编写支付宝支付接口 2.2 ...

  3. PHP开发支付宝之电脑网站支付--流程简介

    前言 前端时间自己开发了一个drupal的支付宝模块,现在整理一下过程,因为支付宝官方网站提供的接口及文档都是新接口的,而且使用新接口的过程比较麻烦一点,所以整理一下 1.支付宝的账号必须经过企业资格 ...

  4. 支付宝系列-电脑网站支付

    1.概念 电脑网站支付,也称扫码支付,是专门针对PC端业务而开发的一种支付方式,既有支付宝提供在网页展示一个动态生成的支付二维码,用户通过手机支付宝扫码以后可实现支付功能的一种支付方式. 2.创建应用 ...

  5. 支付宝支付-电脑网站支付

    官方文档 支付接口(alipay.trade.page.pay): 商户系统请求支付宝接口alipay.trade.page.pay,支付宝对商户请求参数进行校验,而后重定向至用户登录页面. 用户确认 ...

  6. 支付宝支付-电脑网站支付开发

    公司产品需要做一个订单系统,需要在线下单支付功能,由于时间紧,任务重,选择了阿里的电脑网站支付作为支付的手段接入.一定要区分阿里的扫码支付和电脑网站支付的区别,刚开始我就搞混了.网站支付的页面类似于下 ...

  7. Java之支付宝支付(电脑网站支付)沙箱测试版

    支付宝支付流程及注意事项(沙箱测试版) 一:支付宝支付接入准备工作: 首先,支付宝支付和微信支付意愿,都是只支持企业用户,个人用户是不能接入支付宝支付的,所以要想接入支付宝支付,首先需要有支付宝的企业 ...

  8. 支付宝之电脑网站支付(保姆版)

      大家好,我是大史兄弟,一个不断摸索爬行的程序员.看CSND文章已经有好多年了,但是写文章还是第一次.我不是行业的大牛,只是一个希望不断进步成为大牛的小白程序员.   不知道有没有和我一样情况的,学 ...

  9. 接入支付宝电脑网站支付实现JAVA版

    简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址,因为我这些服务天天在更新,而我的文章是教大家方法,而让你不是照葫芦画瓢 ...

最新文章

  1. c语言求两者之间最小数,C语言课件第2章基本数据类型.ppt
  2. python:collections模块
  3. Windows服务器安全设置经验详谈
  4. Spring Cloud Config采用数据库存储配置内容【Edgware+】
  5. 项目Alpha冲刺--9/10
  6. 18 Python 模块引入
  7. 一道实用linux运维问题的9种shell解答方法!
  8. shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断
  9. 方舟服务器炸了怎么修复,《方舟:生存进化》诸事不顺!退款BUG修复服务器又炸...
  10. 今天小暑是什么时间_小暑时间是什么?代表什么?
  11. 论述:企业如何做好网络营销推广
  12. python程序设计机械工业出版社课后答案-Python 3程序设计基础
  13. 2018计算机网络MOOC第一章作业1
  14. 钉钉企业内部开发工具配置
  15. 一个关于视频播放的小项目
  16. 欧姆龙PLC远程上下载实际操作分享
  17. 小程序页面传值传递对象[Object Object]
  18. Prometheus启动成功访问页面显示Service Unavailable
  19. 求解全局优化问题的改进灰狼算法
  20. 雅致古典山水中国风PPT模板

热门文章

  1. ESP8266笔记—DHT11温湿度传感器
  2. 【绝对干货】java面试笔试题及答案
  3. 卷积尺寸计算公式(含膨胀卷积和反卷积情况)
  4. android获取屏幕属性,获取手机屏幕DisplayMetrics属性多种方法
  5. STM32F103ZE点亮发光二极管例程
  6. Linux磁盘分区对superblock的理解
  7. linux shell expr除以0,shell expr用法详解
  8. 用turtle库绘制Python Logo图案
  9. 必须理解的计算机核心概念
  10. catia圆型与矩形的桥接_4.3.7.2-桥接曲面_复杂构面