0

0

支付宝的支付接口在.net中的使用

巴扎黑

巴扎黑

发布时间:2017-08-14 11:36:27

|

2257人浏览过

|

来源于php中文网

原创

这篇文章主要为大家详细介绍了.net接入支付宝的支付接口,h5网站接入支付宝的支付接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

H5手机网站接入支付宝的支付接口,推荐使用支付宝提供的SDK来快速开发

我使用的是SDK开发

引用命名空间


using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;
using Aop.Api.Util;

首页需要定义一些常量


 static string serverUrl = "https://openapi.alipaydev.com/gateway.do";
    static string app_id = "**";  //开发者的应用ID
    static string format = "JSON";
    static string charset = "utf-8";
    static string sign_type = "RSA2"; //签名格式
    static string version = "1.0";
    string UID = "2088102169707816";//卖家支付宝账户号
    //商户私钥
    static string merchant_private_key = "***";
    //支付宝公钥
    static string alipay_public_key = "***";

这里的app_id,merchant_private_key,alipay_public_key 我就没有列出来了,获取的方法需要自己去支付宝平台完成一些操作进行获取

在用户点击网站付款时,我们需要唤醒支付宝,来进行支付

乐彼多用户商城系统LBMall(.net)
乐彼多用户商城系统LBMall(.net)

乐彼多用户商城系统,采用ASP.NET分层技术和AJAX技术,运营于高速稳定的微软.NET+MSSQL 2005平台;完全具备搭建超大型网络购物多用户网上商城的整体技术框架和应用层次LBMall 秉承乐彼软件优秀品质,后台人性化设计,管理窗口识别客户端分辨率自动调整,独立配置的菜单操作锁,使管理操作简单便捷。待办事项1、新订单、支付、付款、短信提醒2、每5分钟自动读取3、新事项声音提醒 店铺管理1

下载


public string H5RequestPayWay(OrderPO order)
    {
      IAopClient client = new DefaultAopClient(serverUrl, app_id, merchant_private_key, format, version, sign_type, alipay_public_key, charset, false);
      AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
      string address= "http://m." + PathLogic1.RootDomain;
      request.SetReturnUrl(address+ "/WebPay/AlipayPayResult");//同步请求
      request.SetNotifyUrl(address + "/WebPay/AsyncPay");//异步请求
      var lstDetail = Context.Data.OrderDetail.Where(x => x.OrderNo == order.OrderNo).ToSelectList(x=>new { x.SkuName});
      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < lstDetail.Count(); i++)
      {
        sb.Append(lstDetail[i].SkuName + ",");
      }
      request.BizContent = "{" +
  "\"body\":\""+sb.ToString().Substring(0,sb.Length-1)+"\"," +
  "\"subject\":\"袋鼠巴巴商品支付\"," +
  "\"out_trade_no\":\""+order.OrderNo+"\"," +
  "\"timeout_express\":\"90m\"," +
  "\"total_amount\":"+(order.TotalAmount.Value+order.TotalFreight.Value)+"," +
  "\"product_code\":\"QUICK_WAP_PAY\"" +
  " }";

      AlipayTradeWapPayResponse response = client.pageExecute(request);
       return response.Body;
    }

具体发送给支付宝的参数,自行去查看

执行方法后,买家输入自己的支付宝账号密码进行支付,支付成功的结果,支付宝会以post的方式异步请求你的SetNotifyUrl的地址

这个SetNotifyUrl的地址必须要外网可以访问,支付宝的请求才能进来

买家支付成功,商家修改订单状态和数据库的操作,都在异步请求中执行

同步请求


public ActionResult AlipayPayResult()
    {
      ViewBag.result = "success";
      return View("PayResult");
    }


     /// <summary>
    /// 验证通知数据的正确性
    /// </summary>
    /// <param name="out_trade_no"></param>
    /// <param name="total_amount"></param>
    /// <param name="seller_id"></param>
    /// <returns></returns> 
private SortedDictionary<string, string> GetRequestPost()
    {
      int i = 0;
      SortedDictionary<string, string> sArray = new SortedDictionary<string, string>();
      NameValueCollection coll;
      //Load Form variables into NameValueCollection variable.
      coll = Request.Form;

      // 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.Form[requestItem[i]]);
      }

      return sArray;
    }


 /// <summary>
    /// 验签
    /// </summary>
    /// <param name="inputPara"></param>
    /// <returns></returns>
    public Boolean Verify(SortedDictionary<string, string> inputPara)
    {
      Dictionary<string, string> sPara = new Dictionary<string, string>();    
      Boolean verifyResult = AlipaySignature.RSACheckV1(inputPara, alipay_public_key, charset,sign_type,false);
      return verifyResult;
    }

异步请求:


 [HttpPost]
    public void AsyncPay()
    {
      SortedDictionary<string, string> sPara = GetRequestPost();//将post请求过来的参数传化为SortedDictionary
      if (sPara.Count > 0)
      {
        AlipayTradeWayPayServer pay = new AlipayTradeWayPayServer();
        Boolean VerifyResult = pay.Verify(sPara);//验签if (VerifyResult)
        {
          try
          {
             //商户订单号
            string out_trade_no = Request.Form["out_trade_no"];
            //支付宝交易号
            string trade_no = Request.Form["trade_no"];
            //支付金额
            decimal total_amount = Request.Form["total_amount"].ConvertType(Decimal.Zero);
            //实收金额
            //decimal receipt_amount = Request.Form["receipt_amount"].ConvertType(Decimal.Zero);
            //交易状态
            string trade_status = Request.Form["trade_status"];
            //卖家支付宝账号
            string seller_id = Request.Form["seller_id"];

            //商品描述
            string body = Request.Form["body"];
            //交易创建时间
            DateTime gmt_create = DateTime.Parse(Request.Form["gmt_create"]);
            //交易付款时间
            DateTime gmt_payment = DateTime.Parse(Request.Form["gmt_payment"]);
            string appid = Request.Form["app_id"];
            WriteError("验证参数开始");
            Boolean DataValidity = pay.CheckInform(out_trade_no, total_amount, seller_id, appid);//商家判断参数时候是否匹配if (DataValidity)
            {
              if (Request.Form["trade_status"] == "TRADE_FINISHED")
              {
                AlipayWayPayPO model = CreateAlipayWayPay(out_trade_no, trade_no, trade_status, gmt_create, gmt_payment);
                pay.PaySuccess(out_trade_no, model, Server.MapPath("~/" + DateTime.Today.ToString("yyMMdd") + ".txt"));//修改订单
                //注意:
                //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
              }
              else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
              {
                AlipayWayPayPO model = CreateAlipayWayPay(out_trade_no, trade_no, trade_status, gmt_create, gmt_payment);
                pay.PaySuccess(out_trade_no, model, Server.MapPath("~/" + DateTime.Today.ToString("yyMMdd") + ".txt"));//修改订单
                //注意:
                //付款完成后,支付宝系统发送该交易状态通知
              }
              else
              {

              }

              //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

              Response.Write("success"); //请不要修改或删除

              /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
          }
          catch (Exception ex)
          {
            
          }
        }
        else//验证失败
        {
          Response.Write("fail");
        }
      }
      else
      {
        Response.Write("无通知参数");
      }
    }

相关文章

支付宝
支付宝

支付宝,全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付服务,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

44

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

37

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

22

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

19

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

3

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

268

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

51

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

430

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.5万人学习

python编程入门系列图文教程
python编程入门系列图文教程

共65课时 | 24.9万人学习

vscode其实很简单
vscode其实很简单

共72课时 | 29.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号