完整教程链接:ASP.Net: EshineASPNet-基于ASP.Net敏捷开发开源框架

支付也是最常见功能之一了,不管是商城还是服务,从商业模式上讲,一般会看一个项目离钱有多近,支付功能是2C的最直接盈利方式了。

支付机构

支付机构很多,哪些公司拿到了国家给的支付牌照不是讨论范畴,主流的大家肯定都会使用到支付宝和微信支付,下面会着重讲。另外还有大家可能不太熟悉的比如联动U付、快钱、通联、易宝等。每家支付提供的服务大同小异,一般要用到的网页支付、移动支付、批量付款等都是有的。差别也总是有的,手续费率,服务等还是有差别。你总可能会遇到一些支付宝并不满足的需求时,你就可能回去寻求别的第三方支付了。比如笔者此前的业务需要效仿欧美的消费方式,输入信用卡卡面信息来支付。又或者你想在手续费上能讨价还价,因为支付宝太大了除非你的流水很大否则人家根本不会鸟你。又或者你想作为中间平台把收入扣除你的手续费后转到其他账户,等各种金融相关的奇怪需求,都是可谈的,国人就是这样好,灵活,也是这样不好,章法不严格坏事的比较多。当然这些一般程序员不需要考虑,CTO是需要掌控的,只是想说一句永远不要只局限在技术范畴,不闲扯了。

手续费

费率方面支付宝此前是交易的1.2%,按流水大小最低可以降到0.6%,现在中小企业能降到固定0.55%了,微信也是0.6%,其他第三方也差不多,快钱通联0.5%,量大可谈。这笔手续费会在交易成功后立刻扣除,到账的就是扣除后的金额。别小看0.1%,每100万流水支付机构就要收1000块,那0.6%就是6000块,这也不能忽视了,因为销售的数额里面很大一部分是成本,这个手续费要从利润里面扣,考虑到税就更复杂了。当然现在国家税务在互联网支付平台的钱还不怎么监管,主要看的是银行流水,所以用支付宝等也提供了一个避税的可行方式很多公司也这么在做。未来肯定没这空子了,连比特币央行也会研究,怎么让税务监管到支付宝只是时间的事,只是法规的出台周期比较长。

无手续费转账

上面说的费率是网上商店购买产生订单的情况,还有一种情况是没有手续费的,那就是用户转账,每个商户都有个二维码,在支付宝叫商户收款码,扫这个二维码不会出现金额,因为这个没有对应某个订单,金额自己输入,钱到了商户账户不会扣除手续费。这种方式的弊端也很明显,需要人工去查账,需要人工去匹配订单。所以可以权衡0.6%的手续费高还是雇一个员工来做查账的成本高,这个根据订单数量实际情况考虑就行了。现在街边小商店放的二维码多数都是个人二维码,也是这种转账形式的,小商店连发票都不开怎么会交这0.6%的手续费对不对。

网银支付

除了支付宝等第三方支付公司,还有当初牛逼哄哄现在也还牛逼哄哄的银行了。网银支付一直有,需要知道的是现在选了网银支付其实多数最后走的还是第三方支付通道,不一定是支付宝,而且多数都不是支付宝,为什么呢,因为其他小支付公司可以给到更优惠的费率。不过我们还是可以在给消费者的展示页面显示银行列表,最后跳转到的页面也确实是银行的支付页面,只是收款方变成了第三方支付机构而不是你消费的商户了。

支付限制

再说说支付限制,首先是消费者付款的限制,大多数自己不做限制,而是根据银行的限制来。有些比如快钱单笔不超过1万,1天不超过2万,量大可调。支付宝单笔不超过10万,1天不超过200万。这个可能你会觉得一般怎么会达到这个限制,笔者举个例子,如果你做的是租房业务,你可能会提供年付的选项(获得额外折扣),1个好房源可能月租金就过万了,那么单笔就可能超额了。至于玉石字画奢侈品这些那就更可能超了。
然后是商户账号转出的限制,多数无金额限制,支付宝限制每天限额500万,快钱限制只能提现到对公账户。多数也没有提现手续费,支付宝当日到账会有0.2%手续费,最低2元最高25元,次日到账不收。还没完,这些不能都是人工操作吧,如果要自动操作那就需要对接API接口了,API付款,快钱2元每笔,通联2.5元每笔,易宝5000以下本地1元异地5.5元,支付宝单笔超过2万收0.15%,最低2元最高25元。都不大一样,自行比较。

支付宝与微信支付

一家阿里一家腾讯,渊源也挺深的,马云创阿里的时候找马化腾投资没投,看不看好的原因还是估值原因还是占股份额原因就不究了可能都有。腾讯很牛的,腾讯最牛的就是抄(笔者说的是过去,现在也创新也投资),抄的都青出于蓝而胜于蓝,不过也有不成功的,微博输给新浪,财付通输给支付宝,现在微信支付才算不错。当然也有阿里想去社交分一杯羹的没成功。微信支付背后也绑的是财付通,个人感觉支付还是支付宝做的比较好,纯个人意见勿喷。

接口对接

每家做支付的都提供完善的接口文档和使用范例等,对接是挺容易的一件事情,无非就是修改一下商户号,密钥等的参数,而这些其实都是签约的产出,属于商务部分,但是过程中也可能涉及到填写域名,ip等小部分技术参数的,属于业务和技术共同参与的部分。这里不会把接口文档的代码贴出来,每家也不一样,不过需要提一样跟支付关联的数据库设计。我们的订单数据库必须预留字段来存储从支付机构返回回来的支付号码,支付日期等数据,这样后期不管人工还是自动查账才好有个依据。如果计划对接多个第三方支付,那么每个支付机构都有对应的字段,当然也可以只用1个公用的字段用JSON方式存储,可以自行在筛选便利性和数据结构复杂性上权衡。必定要修改的就是订单状态字段了,支付端口会在支付完成后多次推送支付成功消息,接口在收到后要首先检查订单状态是否已经处理了这个支付消息,如果是就忽略,否则执行相应的操作,比如修改订单状态为付款成功,发送通知短信,启动配货流程等。
这里拿支付宝即时到账产品做个例子。通常我们会把notify_url和return_url等写在Web.Config来读取,首先引用支付宝Com.Alipay,然后把订单信息存入Dictionary,包括上面的notify_url、return_url、主题(通常订单不会有名称,可以设一个通用名称比如Eshine精选,或者多个商品就挑选第一个商品名作为主题)、订单号(自己的订单号,不是后面在支付宝的支付订单号)、总价(注意不同第三方支付的标准不一样,有些以分为单位,即整形,有些以元为单位,即浮点型)、内容(空着就好了)、防钓鱼时间戳等,如果是选择了网银支付还要把银行的代码填进去,这个比较通用,最后其实是生成了一个用来Post的Form和一条JS用来自动执行Post。

    public void goalipay(string out_trade_no, string total_fee, string paytype){//支付类型string payment_type = "1";string notify_url = System.Configuration.ConfigurationManager.AppSettings["notify_url"];string return_url = System.Configuration.ConfigurationManager.AppSettings["return_url"];string seller_email = "pay@eshinelee.com";//订单名称string subject = (string)GetGlobalResourceObject("GResource", "mpselection");//订单描述string body = "";//商品展示地址string show_url = "";//防钓鱼时间戳string anti_phishing_key = Submit.Query_timestamp();//若要使用请调用类文件submit中的query_timestamp函数//客户端的IP地址string exter_invoke_ip = "";//非局域网的外网IP地址,如:221.0.0.1//把请求参数打包成数组SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();sParaTemp.Add("partner", Config.Partner);sParaTemp.Add("_input_charset", Config.Input_charset.ToLower());sParaTemp.Add("service", "create_direct_pay_by_user");sParaTemp.Add("payment_type", payment_type);sParaTemp.Add("notify_url", notify_url);sParaTemp.Add("return_url", return_url);sParaTemp.Add("seller_email", seller_email);sParaTemp.Add("out_trade_no", out_trade_no);sParaTemp.Add("subject", subject);sParaTemp.Add("total_fee", total_fee);sParaTemp.Add("body", body);if (paytype != "alipay"){sParaTemp.Add("paymethod", "bankPay");sParaTemp.Add("defaultbank", paytype.Substring(7, paytype.Length - 7));}sParaTemp.Add("show_url", show_url);sParaTemp.Add("anti_phishing_key", anti_phishing_key);sParaTemp.Add("exter_invoke_ip", exter_invoke_ip);//建立请求string sHtmlText = Submit.BuildRequest(sParaTemp, "get", "确认");Response.Write(sHtmlText);}

上面的Submit是支付宝的类里面的。这段代码展示了订单提交到支付宝的过程,从这一刻起页面就跳转到支付宝网站了,也就是不在你自己的网站页面了,为避免用户没有完成付款却无法跳转回到你的网站,这个付款页面应该是一个新窗口,但不是JS打开的新窗口,因为会被浏览器拦截,这样不管付款成功不成功,用户还能浏览你的网站,可以去我的订单页面重新支付。
支付成功后的处理这里展示一个样例,最终按照实际情况处理。

            if (verifyResult)//验证成功{orders.orderID = int.Parse(Request.QueryString["out_trade_no"]);orders = ob.getorders(orders);if (orders != null){orders.payRefNum = Request.QueryString["trade_no"];orders.payNote = Request.QueryString["trade_status"];if (Request.Form["trade_status"] == "TRADE_FINISHED"){//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序if (orders.orderStatus != "付款完成"){orders.orderStatus = "付款完成";PublicClass pc = new PublicClass();orders = pc.doshop_eticket(orders);}}else if (Request.Form["trade_status"] == "TRADE_SUCCESS"){}ob.Update(orders);}Response.Write("success");  //请不要修改或删除}

上面这段代码是放在notify_url里面的在验证成功后首先根据返回回来的订单号在自己的数据库把订单找出来,如果找到了,如果没有处理过,那么把支付宝订单号、支付状态等存进去,修改付款订单为付款完成,并做后续处理。

结语

最开始大篇幅的内容是想共勉不要把眼光仅局限在技术,技术是为业务服务的。

本教程代码参考
EshineASPNet\Web\payment.aspx
EshineASPNet\Web\notify_url.aspx

完整教程链接:ASP.Net: EshineASPNet-基于ASP.Net敏捷开发开源框架

ASP.Net: EshineASPNet教程-支付机构支付模块相关推荐

  1. ASP.Net: EshineASPNet教程-身份证校验与正则

    完整教程链接:ASP.Net: EshineASPNet-基于ASP.Net敏捷开发开源框架 很多应用都会涉及到用户身份证的输入,严格的程序并不会接受用户随便输入一串字符,而应该检查身份证是否合法,这 ...

  2. iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程

    本章项目demo: https://github.com/zhonggaorong/weixinLoginDemo 本章不讲解: 微信sdk的集成 , 项目集成的文章请参照 (包含微信登录):   h ...

  3. 揭秘支付机构【备付金】管理过程

    目录 一.客户备付金 二.备付金银行 三.备付金银行账户 四.备付金利息 五.备付金集中存管 随着支付机构的业务发展,交易规模迅速增长,交易金额迅速猛增,我们在享受着日益便捷的支付服务的同时,大量客户 ...

  4. 支付机构客户备付金存管办法

    支付机构客户备付金存管办法 第一章总则 第二章备付金银行账户管理 第三章客户备付金的使用与划转 第四章监督管理 第五章附则 第一章总则 第一条为规范支付机构客户备付金管理,保障当事人合法权益,促进支付 ...

  5. 最后半天时间,支付宝等第三方支付机构备付金必须100%上交

    这几天支付宝.微信等第三支付机构备付金100%上交央行的新闻相信大家已经看到很多,对于备付金可能大家都不是很了解,甚至很多人认为这是不是银行又跟支付宝等第三方支付机构过意不去了,今天我们就带大家来了解 ...

  6. 第三方支付机构有哪些?他们的资金是如何运作保障用户的资金安全的?

    回答第一个问题我们不如先研究三方支付的产业阶段,研究产业的过去,现在以及未来的价值走向去看看在这个产业链上还有多少空间是尚待开发的,目前又到达了什么阶段. 首先我们先看看三方支付究竟帮助我们解决了什么 ...

  7. 第三方支付机构是什么

    1 第三方支付机构是什么 先看一下以下场景,A想要跨行给B转100元钱,没有银联之前,A要把钱取出来,再存到B的银行卡里: 有了银联之后呢,可以通过银联卡直接转到B的银行,当然这是要收手续费的,手续费 ...

  8. 支付机构备付金管理过程

    客户备付金 客户备付金是指支付机构办理客户委托的支付业务,实际收到的预收代付货币资金. 央行的这个定义是参考了国际经验并结合国内支付业务涉及客户备付金的各种情形后,从备付金产生.存放两个角度,明确了客 ...

  9. 支付机构违规已成常态 盛付通再次被央行处罚

    9月25日,中国人民银行太原中心支行公布了一张新罚单,上海盛付通电子支付服务有限公司山西分公司(下称"盛付通")因违反了<非金融机构支付服务管理办法>和<银行卡收 ...

最新文章

  1. Blender左轮手枪制作教程
  2. 关于文章 Generating Impact-Based Summaries... By Mei qiaozhu
  3. IOS开发报错之Undefined symbols for architecture armv6
  4. ubuntu下inotifywait实现目录、文件监控【包含子目录】
  5. 2015 03 03 复习 上课笔记(一)
  6. 大数据之-Hadoop三大发行版本---大数据之hadoop工作笔记0010
  7. ajax上传.mp4文件不出错,ajax视频如何上传?
  8. 文件服务器版压缩工具,FileOptimizer文件压缩工具
  9. C语言符号优先级——(“++”符号的的坑)
  10. python黑白棋 pygame_python使用minimax算法实现五子棋
  11. 实名认证 芝麻认证 人脸识别 集成
  12. Java实现斗地主发牌
  13. SpringSecurity实战(七)-对接第三方登陆-流程分析
  14. LeetCode题解 Day1数组的遍历
  15. 如何修改品牌电脑logo,让你电脑开机更个性
  16. 以太网传输中的NNI与UNI
  17. fatal: 无法访问 ‘https://gitlab.com/libeigen/eigen.git/‘:Failed to connect to gitlab.com port 443: 没有到主机
  18. 使用fairseq从头开始训练一个中英神经机器翻译模型
  19. 【光电工程实训】物理光学 干涉及衍射实验 偏振现象 波的衍射理论 光的偏振 方晶石
  20. python实现发送和获取手机短信验证码

热门文章

  1. 我做实施交付那些年——说点废话(1)
  2. Anbox 容器管理服务
  3. 请编写一个程序,输入一个由小写字母和其他字符构成的序列字符串保存在tt中,统计“a”到“z”26个字母各自出现的次数,并依次保存在pp数组中,并输出pp数组内容。
  4. 一本通 1273:货币系统
  5. 计算机函数sumif求平均值,用sumif函数如何求平均值
  6. 计算两个数的平均值几种方法
  7. PyTorch 深度学习实践 第3讲 反向传播
  8. Attrbute value muster
  9. APP软件测试点着重详解
  10. IOS App的生命周期