最近做快钱支付平台的退款功能,遇到不少问题,在解决问题的过程中,也获得了不少心得,现在将它们整理出来,以备不时之需。

首先,在做退款功能前,需要研究《快钱人民币网关商户退款接口规范》,弄明白退款所必需的流程,根据接口规范定义,完整的退款流程应该包含以下步骤:

1. 在我们的web应用中,首先要确定两个要素:需要退款的订单本次退款金额,接下来,便是根据快钱接口规范,拼接退款Url地址。

2. 拼接退款地址时,我们需要先了解接口规范,理解每个参数的含义,下图是接口规范的定义。

merchant_id为商户的编号,即快钱的客户编号,找他们要就是了。

version与command_type固定不变。

txOrder为退款流水号,由你自己制定生成规则,对于快钱来说,你只需要保证生成出来的号码唯一就OK了。

amount为本次退款金额,在提交时最好格式化一下,统一带两位小数。

postdata为退款提交时间,一般取当前时间,格式为“yyyyMMddHHMMSS”。

orderid为订单号,是缴费时,由你自己制定规则,生成的订单编号,同样要保证唯一性,快钱通过这个编号,找到对应的缴费订单。

mac为加密串,MD5加密,偏移量由快钱提供,加密内容包含退款流水线号、退款金额、提交时间、订单号等等,用于安全校验,避免其他参数被修改,导致一系列安全问题。

以上参数中,merchant_id、version、command_type,这三个是固定不变的,可以放到配置文件中,也可以放到数据库表格中。

3. 第三步便是由我们的web应用来访问这个拼接好的地址了,这个地址的返回值是一段XML文档,只有接受到返回值,才能说明退款流程顺利,我们才能进行后续的退款修改数据库的操作。

问题是在这个阶段发生的,由于某些原因,我们的web服务器是无法连接外网的,也就是说,如果我们的web应用采用服务端访问这段地址,是永远获取不到快钱返回给我们的数据。

于是,我们决定将访问操作放在客户端,由客户端使用Ajax来访问这个链接,并且由于是Ajax访问,我们写了一段非常漂亮,用户体验超棒的代码,但是,很快我们发现又遇到了另外一个问题,那就是js跨域访问的问题

尝试过很多解决办法,例如:

JavaSrcipt跨域解决方案(这也是我说服我老大的一个凭据, - -    还是专家博客比较好使!)

关于跨域有三个办法,第一个是使用服务端代理,这是一个最常见也最好使的办法,但是,这个办法被我们当前的实际条件所拒绝(服务端不能连外网,公司不会因为这个功能而做出让步)。

第二个是使用<script>标签,利用src的设置来解决问题,这个也做过了尝试,但是它要求返回的数据必须是Json格式或js文件的格式,而我们又无法要求快钱修改他们的接口定义,所以,这个方案也被否决了。

第三个便是使用隐藏Iframe,然后,我们在尝试过程中发现,Iframe只能解决一级域名相同情况下的跨域访问,在一级域名不同的情况下,一样存在权限被限制的问题,虽然能看到快钱返回的数据,但根本无法访问。

至此,我们似乎走到了胡同的死角,基本上,在技术层面已经无法解决这个问题了,只能通过沟通,来获得更多的一些东西。

后来,一番交涉,我们获得了一台内外网中转的机器,是公司的邮件服务器,解决办法就是,我在客户端使用Ajax请求后台的Action,后台的Action请求部署在邮件服务器上的web services,然后,这个web services访问快钱的退款链接,终于把这个问题给解决了。


上面解决了思路问题,下面就附贴一些代码吧!贴点代码,篇幅都要长一点    - -

      退款相关js

      退款Action

web services接口定义

快钱支付平台 退款功能相关推荐

  1. 快钱 支付 php,GitHub - laraveler/omnipay-99bill: 基于Omnipay的快钱支付SDK

    omnipay-99bill 基于Omnipay的快钱支付SDK 该文档共包含以下5个部分: 1.创建交易 2.支付回调 3.交易查询 4.网关退款 Quick Start 快速开始 PHP版本要求: ...

  2. 在J2EE项目中集成快钱支付接口

    转载地址 [url] http://my.oschina.net/bairrfhoinn/blog/78184[/url] 首先是发送快钱支付请求的页面send.jsp,内容如下: 001 <% ...

  3. magento -- 开发magento快钱支付模块

    浪费了三四天时间终于完成了magento的快钱支付模块.其实对于熟悉magento的程序员来说,开发一个普通的支付模块不需要太多的时间,可能一天或者一个下午就可以完成开发和测试.然而快钱的magent ...

  4. php 银行支付通道_使用php实现快钱支付功能(涉及到接口)

    本项目用zend framework框架实现的modules/default/controllers/IndexController.php IndexController.php class Ind ...

  5. php 实现快钱支付功能(涉及到接口)

    本项目用zend framework框架实现的 modules/default/controllers/IndexController.php IndexController.php <?php ...

  6. 快钱接口php,快钱支付接口

    1.下载快钱的demo代码和一个证书包,还有 人民币网关自助接入接口文档 2.生成自己的证书 2.0.安装   Win32OpenSSL_Light-0_9_8k.exe 打开openssl.exe, ...

  7. php 微信支付 退款接口,php实现微信支付之退款功能

    网上的很多PHP微信支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信支付的带来些许帮助和借鉴意义. 直接运行该文件即可给指定的微信用户退款 ...

  8. 微信小程序支付以及退款功能(超详细)

    Springboot整合微信小程序支付 第一步: 第二步:导入微信支付的依赖 第三步:在springboot核心配置文件中配置参数 第四步:创建配置类WxPayAppConfig 第五步:支付方法 s ...

  9. 第三方支付公司之快钱

    疯传了近半月快钱要卖的消息,今天终于坐实了,但是卖身对象最终却由传闻中的百度转向了万达. 今日上午,"万达集团战略控股快钱"具体细节正式公开,万达集团将出资20亿控股快钱.快钱方面 ...

最新文章

  1. Commonly Hacked Ports
  2. SpringBoot-hello world
  3. 点(Dot)与像素(Pixel)的区别
  4. [PE格式分析] 3.IMAGE_NT_HEADER
  5. 浏览器预连接性能测试
  6. Per-FedAvg:联邦个性化元学习
  7. Zookeeper 入门指北
  8. 原 python实现模糊匹配_使用python中的fuzzywuzzy库进行模糊匹配实例
  9. 【我看Spring】从一个简单的AOP示例看切面编程
  10. 交互设计中的“所见即所得”原则
  11. swift5的下标Subscripts 花式玩法
  12. powerbuilder11的webform发布和webservices调用实践
  13. sql server 2008导出数据至Excel或者wps
  14. php 字符相似度比较,php 比较两个字符串的相似度
  15. 霍尼韦尔Granit 1990iSR工业二维码扫描枪
  16. vue进阶实战 vue进阶课程 vue进阶
  17. Android中使用封装的OKHttp上传图片,从相机和相册中获取图片并剪切
  18. 路由器、交换机、服务器等网络设备常见故障及解决方法
  19. 第十一届“挑战杯”广东省大学生课外学术科技作品竞赛总结——谢凌云
  20. 一文整理总结常见Java后端面试题系列——Java虚拟机篇(2022最新版)

热门文章

  1. c语言表示整型变量,在表示 C语言的整型变量时,表示“无符号长整型”的符号是( )。...
  2. Matlab中switch, case, otherwise语句
  3. 自动驾驶路径规划技术-高速公路路径规划
  4. 递推算法与递推套路(算法基础篇)
  5. 并查集——NUIST OJ P1648 炼丹术为例
  6. php 如何启动ica文件,什么是ICA文件?Win10专业版如何打开ICA文件?
  7. 桥牌坐庄训练bm2000 level3闯关记录——A5
  8. 囊括七大主流搜索引擎 这个网站统计工具神了!
  9. 自动控制原理->根轨迹
  10. FLASH多文件上传组件