【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo...

news/2024/5/19 2:06:33/文章来源:https://blog.csdn.net/weixin_33796177/article/details/85641154
原文:【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

       开篇先给大家讲段历史故事,博主是湖北襄阳人。襄阳物华天宝,人杰地灵,曾用名襄樊。在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩然(孟襄阳),张继、杜审言,文学家皮日休,北宋著名书画家米芾(米襄阳),“允冠百王”的光武帝刘秀,东方圣人释道安等一大批历史文化名人。小说《三国演义》120回故事中有30多回提到襄阳。

    相传诸葛亮的老婆黄月英黄头发黑皮肤,但知识广博。诸葛亮发明木牛流马,就是从黄月英的传授的技巧上发展出来。不仅如此黄月英还有一大很重要的发明,就是大头菜,传承多年到现在已经成为湖北襄阳的一道特产,也是一项重要的饮食文化,早几年有关部门根据诸葛孔明的赫赫大名为大头菜取了个比较国际化的名字:孔明菜(广告语:吃孔明菜,谋天下事!)。

    正是因为孔明菜响亮的声誉美名,近几年家乡的孔明菜事业繁荣发展,畅销五大洲,海内外。为了更好的打造国外市场,博主有幸得令,成为襄阳市孔明菜国际互联网电子商务平台打造任务的一分子,负责对接国际支付接口Paypal。

    以上故事只为引题,部分虚构,如有雷同,不胜荣幸。如果你正在或将来打算赚赚老外的钱,那就跟着博主的节奏一起来国际化吧!

    怎么对接Paypal支付呢?博主选择了其中的一种对接方式即(快速结账),也是当前的主流对接方式,具体步骤和详细参见官方介绍:https://www.paypal-biz.com/developer/internet/ec/,博主友情提示,操作步骤需要遵循,至于每个步骤的文档可以粗略的看看。

    因为博主一出道就从MVC干起,传统的webForm先天性驾驭不了,也没那闲时间去回头学习,官方提供的源码下载下来一直未调通(如有大神调通,望不吝赐教!)。所以博主潜心研究,取其技术精髓,整合出了一个MVC3版本下的demo供各位看官参考。

    MVC对接Paypal怎么做呢?我们需要如下准备材料:

  1. 在Paypal官方注册个高级帐号:https://www.paypal.com/c2/webapps/mpp/get-started
    然后在开发者中心里面去创建至少一个卖家和一个买家帐号(供您在上线之前做测试用,官方称之为Sandbox帐号,同可以理解为测试环境帐号):https://developer.paypal.com/webapps/developer/applications/accounts,如下图,红色代表卖家帐号,绿色代表买家帐号


  2. 在项目中加入官方dll文件,引用Paypal类库paypal_base.dll和log4net.dll,已在源码中附加。

  3. 获取卖家帐号API配置项,(配置项的关键需要从您创建的某个卖家帐号中获取,获取方式如下图):


  4. 配置卖家帐号API到您的网站:
    <!--Paypal支付账号配置--><add key="APIUserName" value="wen_api1.shipfinder.cn"/><add key="APIPassword" value="1376359127"/><add key="APISinature" value="An5ns1Kso7MWUdW4ErQKJJJ4qi4-AKqBVNoNVjFOrjJUxaTCiRAvn7V4"/><add key="Environment" value="sandbox"/><!--测试环境:https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token= --><!--真实环境:https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token= --><add key="RedirectURL" value="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&amp;token="/>

     

  5. SetExpressCheckout (向paypal提交订单,自己的网站做订单入库操作)核心代码如下:
    public ActionResult SetExpressCheckout() {string currency = Request.Form["currencyCodeType"];string name = Request.Form["NAME"];string SHIPTOSTREET = Request.Form["SHIPTOSTREET"];string SHIPTOCITY = Request.Form["SHIPTOCITY"];string SHIPTOSTATE = Request.Form["SHIPTOSTATE"];string SHIPTOCOUNTRYCODE = Request.Form["SHIPTOCOUNTRYCODE"];string SHIPTOZIP = Request.Form["SHIPTOZIP"];string L_NAME1 = Request.Form["L_NAME1"];string L_AMT1 = Request.Form["L_AMT1"];string L_QTY1 = Request.Form["L_QTY1"];string L_NAME0 = Request.Form["L_NAME0"];string L_AMT0 = Request.Form["L_AMT0"];string L_QTY0 = Request.Form["L_QTY0"];string hots = Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/";NVPCodec encoder = new NVPCodec();encoder.Add("PAYMENTACTION", "Sale");//不允许客户改地址encoder.Add("ADDROVERRIDE", "1");encoder.Add("CANCELURL", hots + "/Pay/Index");encoder.Add("CURRENCYCODE", currency);encoder.Add("SHIPTONAME", name);encoder.Add("SHIPTOSTREET", SHIPTOSTREET);encoder.Add("SHIPTOCITY", SHIPTOCITY);encoder.Add("SHIPTOSTATE", SHIPTOSTATE);encoder.Add("SHIPTOCOUNTRYCODE", SHIPTOCOUNTRYCODE);encoder.Add("SHIPTOZIP", SHIPTOZIP);encoder.Add("L_NAME0", L_NAME0);encoder.Add("L_NUMBER0", "1000");encoder.Add("L_DESC0", "Size: 8.8-oz");encoder.Add("L_AMT0", L_AMT0);encoder.Add("L_QTY0", L_QTY0);encoder.Add("L_NAME1", L_NAME1);encoder.Add("L_NUMBER1", "10001");encoder.Add("L_DESC1", "Size: Two 24-piece boxes");encoder.Add("L_AMT1", L_AMT1);encoder.Add("L_QTY1", L_QTY1);encoder.Add("L_ITEMWEIGHTVALUE1", "0.5");encoder.Add("L_ITEMWEIGHTUNIT1", "lbs");double ft = double.Parse(L_QTY0) * double.Parse(L_AMT0) + double.Parse(L_QTY1) * double.Parse(L_AMT1);encoder.Add("ITEMAMT", ft.ToString());encoder.Add("TAXAMT", "2.00");double amt = System.Math.Round(ft + 5.00f + 2.00f + 1.00f, 2);double maxamt = System.Math.Round(amt + 25.00f, 2);encoder.Add("SHIPDISCAMT","-3.00");encoder.Add("AMT",amt.ToString());string returnURL = hots + "/Pay/GetExpressCheckoutDetails?amount="+amt.ToString();//获取订单详情的地址,也是此步骤之后的地址
    encoder.Add("RETURNURL",returnURL);encoder.Add("SHIPPINGAMT", "8.00");encoder.Add("MAXAMT", maxamt.ToString());encoder.Add("INSURANCEOPTIONOFFERED", "true");encoder.Add("INSURANCEAMT", "1.00");encoder.Add("LOCALECODE", "US");encoder.Add("NOSHIPPING", "1");encoder.Add("L_SHIPPINGOPTIONISDEFAULT0", "false");encoder.Add("L_SHIPPINGOPTIONNAME0", "Ground");encoder.Add("L_SHIPPINGOPTIONLABEL0", "UPS Ground 7 Days");encoder.Add("L_SHIPPINGOPTIONAMOUNT0", "3.00");encoder.Add("L_SHIPPINGOPTIONISDEFAULT1", "true");encoder.Add("L_SHIPPINGOPTIONNAME1", "UPS Air");encoder.Add("L_SHIPPINGOPTIONlABEL1", "UPS Next Day Air");encoder.Add("L_SHIPPINGOPTIONAMOUNT1", "8.00");encoder.Add("CALLBACKTIMEOUT", "4");NVPCodec decoder = PaypalProvider.SetExpressCheckout(encoder);string ack = decoder["ACK"];string L_ERRORCODE0 = decoder["L_ERRORCODE0"];string L_SHORTMESSAGE0 = decoder["L_SHORTMESSAGE0"];string L_LONGMESSAGE0 = decoder["L_LONGMESSAGE0"];string L_SEVERITYCODE0 = decoder["L_SEVERITYCODE0"];if (!string.IsNullOrEmpty(ack) &&(ack.Equals("Success", System.StringComparison.OrdinalIgnoreCase) || ack.Equals("SuccessWithWarning", System.StringComparison.OrdinalIgnoreCase))){// 发送电子邮件//new MailManager(email, "订单", "订单信息").Send();Session["TOKEN"] = decoder["token"];return Redirect(ConfigurationManager.AppSettings["RedirectURL"] + decoder["token"]);}else{return Redirect("/Pay/Index");}}
    View Code

     

  6. GetExpressCheckoutDetails (根据提交订单后返回的Token,获取当前订单详情 ),核心代码如下:
      //得到支付详细信息string token = Session["TOKEN"].ToString();NVPCodec nvp = new NVPCodec();nvp.Add("TOKEN", token);nvp.Add("CURRENCYCODE", "USD");NVPCodec responsenvp = PaypalProvider.GetExpressCheckoutDetails(nvp);string ack = responsenvp["ACK"];if (string.IsNullOrEmpty(ack) ||(!ack.Equals("Success", System.StringComparison.OrdinalIgnoreCase) &&!ack.Equals("SuccessWithWarning", System.StringComparison.OrdinalIgnoreCase))){return Redirect("/Pay/Index");}string payerstatus = responsenvp["PAYERSTATUS"];string email = responsenvp["EMAIL"];string payerid = responsenvp["PAYERID"];string firstname = responsenvp["FIRSTNAME"];string lastname = responsenvp["LASTNAME"];

     

  7. DoExpressCheckoutPayment(根据订单详情进行验证并支付,然后自己的网站更新支付状态,订单状态),核心代码如下:
    //开始支付
    NVPCodec donvp = new NVPCodec();donvp.Add("TOKEN", token);donvp.Add("AMT", amount);donvp.Add("PAYERID", payerid);donvp.Add("PAYMENTACTION", "Sale");donvp.Add("CURRENCYCODE", "USD");NVPCodec response_do = PaypalProvider.DoExpressCheckoutPayment(donvp);string do_ack = response_do["ACK"];string L_ERRORCODE0 = response_do["L_ERRORCODE0"];string L_SHORTMESSAGE0 = response_do["L_SHORTMESSAGE0"];string L_LONGMESSAGE0 = response_do["L_LONGMESSAGE0"];string L_SEVERITYCODE0 = response_do["L_SEVERITYCODE0"];if (string.IsNullOrEmpty(do_ack) ||(!do_ack.Equals("Success", System.StringComparison.OrdinalIgnoreCase) &&!do_ack.Equals("SuccessWithWarning", System.StringComparison.OrdinalIgnoreCase))){return Redirect("/Pay/Index");}else {string paymenttype = response_do["PAYMENTTYPE"];string transactionID = response_do["TRANSACTIONID"];string note = response_do["NOTE"];string ordertime = response_do["ORDERTIME"];string paymentstatus = response_do["PAYMENTSTATUS"];string reason=response_do["PENDINGREASON"];double feeamt = double.Parse(response_do["FEEAMT"]);return Content("恭喜您支付成功!");}

     

  8. 真正的核心就是5、6、7步骤,用Paypal技术人员熟练的口气说就是Set,Get,Do,最后一步成功后就是处理我们网站业务逻辑的过程。博主这里提供个买家帐号供大家测试(帐号:a@bc.cn,密码:11111111),下面附上demo运行效果:




       

      源码下载地址

 

         感谢阅读,如果您觉得此文对你有用,不要吝啬右边的推荐哦,大家的支持是我分享智慧的动力,后面的文章打算聊聊如何对接支付宝,有兴趣可以通过关注本博客或我的微博动态!

       正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_797361.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome将在网站上显示不安全警告

据谷歌给站长的邮件通知&#xff0c;从2017年10月起&#xff0c;当用户在HTTP网页上的表单中输入文本时&#xff0c;Chrome&#xff08;版本62&#xff09;将显示一条“不安全”警告&#xff0c;并在所有无痕模式下的HTTP网页上显示这一警告&#xff0c;即使没有密码也会显示警…

Nginx——Nginx主要应用之静态网站部署

1.案例 Nginx是一个HTTP的web服务器&#xff0c;可以将服务器上的静态文件&#xff08;如HTML、图片等&#xff09;通过HTTP协议返回给浏览器客户端。 这里我先找了一个ace文件&#xff0c;其中是一个前端的框架&#xff0c;只是为了展示更好的效果。 然后 cd /usr/local/nginx…

阿里云ECS服务器购买流程(超全,新手必备!)-教程配置、运行、建站一条龙

阿里云ECS服务器购买教程 本文提供全图文流程&#xff0c;中文翻译。 Chinar 坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; Chinar —— 心分享、心创新&#xff01;助力快…

windows下在github如何部署gh-page做自己网站图文版。在本教程适合新手,大牛勿喷。。...

2019独角兽企业重金招聘Python工程师标准>>> ##前言 本人一直在coding维护代码&#xff0c;但coding貌似要收费了&#xff0c;新浪云也是收费的节奏&#xff0c;为此&#xff0c;&#xff0c;本人前端&#xff0c;没什么数据库之类的&#xff0c;都是静态页面&#…

网站整体解决方案

下面是我多年积累下来的经验整理文档供大家参考&#xff0c;欢迎您对我的文档提出建议和意见。 Netkiller Architect 手札Netkiller Linux 手札Netkiller Developer 手札Netkiller Database 手札Netkiller Debian 手札Netkiller CentOS 手札Netkiller FreeBSD 手札Netkiller Sh…

Docker学习总结(6)——通过 Docker 化一个博客网站来开启我们的 Docker 之旅

通过 Docker 化一个博客网站来开启我们的 Docker 之旅 这篇文章包含 Docker 的基本概念&#xff0c;以及如何通过创建一个定制的 Dockerfile 来 Docker 化Dockerize一个应用。 Docker 是一个过去两年来从某个 idea 中孕育而生的有趣技术&#xff0c;公司组织们用它在世界上每个…

dedecms网站迁移时记得将安装目录放空 附迁移的正确方法

这段时间在赶一些新项目&#xff0c;我们建站一般都在本地服务器搭建起来&#xff0c;测试得差不多了才传到网上&#xff0c;这样对蜘蛛也相对友好一些&#xff0c;要不然改来改去变化太大给搜索引擎的第一印象很不好。但是由于本地环境和服务器环境还是有一些差别&#xff0c;…

listctrl 优化_留学教育类整站SEO优化公司_官网SEO优化外包费用

原标题&#xff1a;留学教育类整站SEO优化公司_官网SEO优化外包费用百度营销凭借强大的用户产品优势&#xff0c;每天数十亿次搜索请求、超过1亿用户浏览百度信息流、800亿次定位服务请求&#xff0c;为客户提供全系列产品广告资源覆盖用户生活全场景。百度搜索seo搜索优化具体…

我的网站搭建 (第六天) Ckeditor编辑器

2019独角兽企业重金招聘Python工程师标准>>> 富文本编辑器&#xff0c;Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器&#xff0c;所见即所得的文本编辑器&#xff0c;这是百度百科的对富文本编辑器的解释。我们可以借助富文本编辑器&#xff0c;编辑出来一个包…

什么是SEM?SEM是否包括SEO?

什么是SEM&#xff1f;SEM是否包括SEO&#xff1f; 在最近一次营销专业人士和有兴趣了解数字营销的人聚会上&#xff0c;我很惊讶于有人要求我确认他们对“SEM”的理解是准确的。 虽然这个术语本身看起来很基本&#xff0c;但这个问题并不是一个糟糕的问题&#xff0c;因为这个…

23.模拟登录cookies请求速询网站数据

23.模拟登录cookies请求速询网站数据 采集速询网站数据&#xff1a;网站地址&#xff1a;http://www.suxun0752.com/index.html网站是需要账号登录才给返回信息的&#xff0c;我这里是直接拿的登录后的cookies请求的数据&#xff0c;cookies我也给了注释&#xff0c;没做深层的…

域名添加cdn_优化网站-设置内容分发cdn和对象存储cos

刚开始接触花了不少时间去弄&#xff0c;通过搜网上资料&#xff0c;才解决问题。以腾讯云为例&#xff0c;为什么要用腾讯云&#xff0c;因为CDN 用户每月均可享受10GB免费流量包&#xff0c;接入加速域名后于次月1号发放至您的账户。还有新开通 CDN 的用户还会在开通后的6个月…

html漂亮的表格模板+背景_App开发主题响应式网站着陆页模板

哈喽&#xff01;大家好&#xff0c;这里公众号&#xff0c;Adobe素材助手。App开发主题响应式网站着陆页模板&#xff0c;用于应用程序站点。它是干净&#xff0c;现代和创造性的设计适合所有类型的应用程序风格的网站。这个模板是创造性和专业性的完美结合&#xff0c;所有部…

10个留美必备生活网站

不少同学习惯了天朝各种方便的互联网服务&#xff0c;一到美国往往感到不适应&#xff0c;其实美国也有很多提供类似服务的网站。今天小编就给你做一个大盘点。帮助你在美国也能轻松享受和国内类似的服务。1.Yelp 美国最大的点评网站民以食为天&#xff0c;今天我们首先要介绍的…

html颜色渐变配色方案,css网站推荐 渐变色配色方案 - 小俊学习网

渐变色彩搭配方案的酷站&#xff0c;推荐2个渐变色方案的网站。无论网页配色还是设计人员都可以参考这些美丽的色彩。UIgradients – 美丽的UI渐变色分享站 并可转成CSS代码通过渐变彩色滤镜实现很多漂亮的效果&#xff0c;然而用什么渐变颜色才好呢&#xff1f;可以看看今天为…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

大型网站技术架构(三)架构核心要素

2019独角兽企业重金招聘Python工程师标准>>> 所谓架构&#xff0c;一种通俗的说法就是“最高层次的规划&#xff0c;难以改变的决定”&#xff0c;这些规划和决定奠定了事物未来发展的方向和最终的蓝图。 而软件架构即“有关软件整体结构与组件的抽象描述&#xff0…

【读书笔记《Bootstrap 实战》】6.单页营销网站

我们已经掌握了很多实用 Bootstrap 的重要技能。现在&#xff0c;是时候拿出更多的创意来帮助客户实现他们全方位在线营销的愿望了。此次将带领大家做一个漂亮的单页高端营销网站。 主要任务如下&#xff1a; □ 一个大型介绍性传送带图片展示区&#xff0c;配有自定义的响应式…

【JavaWeb开发】初步实现网站应用钉钉扫码登录

写在前面&#xff1a;如果你还不知道钉钉是什么&#xff0c;就赶紧问问Google。当然&#xff0c;这篇博客是用流水线的形式完成钉钉扫码登录。 第一步&#xff0c;看官方文档 网站应用钉钉扫码登录开发指南&#xff08;钉钉官网&#xff09; 如果你想要通过用户扫码获取到他的…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…