最近换了家公司,因为以前也是做支付的来这个公司直接让我从零开始搭建支付服务。首先是微信支付宝的第三方接入。我是做Java开发的。支付宝有接入的sdk就是一个jar包。而且有沙箱环境测试帐号。搞起来很方便。微信的坑就很多了。下面简单总结一下。后面把代码和详细流程贴出来。再把支付宝的也单独写个。
首先微信支付,因为是要用到手机网站和pc网站上的。所以选的是微信公众号支付。
大家一定要先理解微信公众好支付的一个总的流程:https://pay.weixin.qq.com/wiki/doc/api/jsapi.PHP?chapter=7_4
具体的下一篇写。这篇用来总结遇到的坑。
部分是别人总结的我也遇到的就一起写上了:
第一坑:redirect_url参数错误。因为我选择的的“js API”支付,这种支付需要网页授权,先获取code,再拿code去获取openid和prepay_id。这个网页授权需要登录微信公众平台,点击左侧菜单“开发者中心”,在右侧“权限列表”中找到“网页账号”,点击最右侧的修改,把测试的网址写进去,注意不要加http。填好后,这个坑就趟过去了。
第二坑:invalide code。趟过第一坑后,会返回code,再拿此code去获取openid,但是每次到这步时微信那边都返回这个{"errcode":40029,"errmsg":"invalid code"},此坑卡了我整整半个下午。在周天的时候,我又仔细看了开发文档,没得要领,最后又仔细检查了下程序中每次回调的参数。这一检查,就发现要领了,先把回调地址写的最简单,啥参数都不带,成功;接着,一个一个参数带上去,直到带上token这个参数时,返回了invalid code。哈,我猜应该是此参数和微信那边有冲突吧,于是把此参数改成了其他的,此坑立马就过了,接下来支付就一下子调试成功。
第三坑:系统繁忙,正在升级,请稍后再试。周末调试成功后,便把测试代码整合到项目中,开始支付。但是到了支付界面时,便出现了此问题,怎么找到都发现不了问题,点击周末的测试链接又是好的。下午时又仔细看了下上下游的的传递的参数,发现了问题所在。每次上游传递过来的支付金额total_fee都是“1.00”这种类型,因为微信支付的基本单位是分,于是把手动把1.00该为1,成功了。看来是微信支付那边total_fee不能接收小数点,于是我和上游的同事协调了下,传递过来的金额没有小数点,此坑也就过了。
四。经过几次测试,发现微信支付一旦超过十万便会出现上述提示,若是打上断点调试语句的话,会发现微信返回{"errcode":"FAIL","errmsg":"invalid total_fee"}。知道微信支付额度上限,那么只需在后台设置最大不超过十万即可。
五:微信支付 页面URL未注册
这个要去微信公众号---》微信支付——-》开发配置里面做配置
这个微信也没个说明,操蛋。下面是一些规律原则。可以参考
支付授权目录
这里很重要我就是在这里折腾了很久。怎么设置呢,首先要看你支付的当前页面URL
比如是:http://www.taidupa.com/wxpay/js_api_call.php
你就必须填写: http://www.taidupa.com/wxpay/
假如是:http://www.taidupa.com/wxpay/order/id/56.html
你就必须写:http://www.taidupa.com/wxpay/order/id/
看出规律了吧,就是把最后一个反斜杠后面的内容去掉就OK了。
这步跳过基本就能完成支付了。后面再总结细的吧。这些是一些根据错误没法知道哪儿错的坑。
即可以使用手机自带的图片转文本功能,也能使用第三方工具实现文本转换。下面给大家分享几个手机图片转文本技巧,赶紧学起来吧。华为手机——图片转文本找到转换文本的图片,双指长按,等待自动将图片转换成文字。识别的文本支持全文朗读、全选、搜索、复制文字、翻译、分享给好友等多个功能,多方面满足小伙伴不同文本使用需求。苹果手机——图片转文本打开手机中的相册,手机对准需要转成文本页面,右下角自动出现识别文本图标。点击该图标,快速将图片转成文本。 识别的文本支持拷贝或者翻译功能。知意字稿知意字稿是一款在线图片转_手机如何担图片转成小说
当满足《建筑设计防火规范》GB50016 第 5.3.1 条注 2 要求时,可按多层处理, 可以自然排烟。问题 5: 第 3.1.6 条: 关于直通室外的疏散门直通室外的疏散门应是普通门, 不是防火门。问题 6: 加压送风机房内的加压送风机的进风是否一定要接室外百叶?加压送风机房内的加压送风机的进风应接至室外百叶, 可通过集气室等方式连接。问题 7: 加压送风系统仅服务 3 层及以下的前室或合用前...
linxu 安装nginx 一步一步来就OK安装依赖yum install gccyum install pcre-develyum install zlib zlib-develyum install openssl openssl-devel一键安装上面四个依赖yum -y install gcc zlib zlib-devel pcr...
的函数,该函数接受一个图层名称列表作为输入参数。然后,对于列表中的每个图层名称,它检查图层是否已经存在;如果不存在,则创建新图层。用记事本复制以下代码,改文件名为get_selected_text.lsp。按照提示选择文本对象。程序将显示所选文本对象的内容。加载get_selected_text.lsp。这将激活您创建的LISP程序。在AutoCAD命令行中键入。_cad提取文字lisp
好友和我说,编程的核心目标是解决问题。只有把解决问题作为编程学习的动力,才能保持编程学习的长久兴趣。好,我们先确定一个简单的问题。这个问题是:如果我输入一个整数,如何让程序判断这个整数是奇数还是偶数?如果是奇数,最后输出:i是奇数;如果是偶数,最后输出:i是偶数。这个问题,让我们借助人脑来解决,方法便是将这个整数除以2,如果没有余数,即能够整除,那么该整数就是偶数,如果有余数,不能整除,该数就是奇..._pyhton绘制金字塔时如何将数据变成负数
相信买HP笔记本的朋友都有这样的烦恼:自带试用版office2007,只能使用60天,这60天内,每次使用,总提示错误,且不能够卸载。装上其它版本的office软件,还用不了。并且总有用别人电脑的感觉。 这是因为,对这台电脑来说,你只是一个高级点的用户,可以装装软件,但你不可以卸载系统自带的软件,因为你没有权限。(不相信的朋友可以试试在“系统盘”中找到
这个问题在这里已有答案:我有一个编码iso-8959-9的页面 . 我将ajax请求发送到同一页面,同时将一些数据保存到DB . 但它将角色转换为utf-8 . 我的响应 Headers 似乎很好用charset iso-8859-9 . 但是Request Header,Content-Type数据总是UTF-8 . 请参考下面的截图 . 以下是我为解决这个问题所做的工作:1-我设置php标头i..._ajax设置utf-8
Jetson TX1/TX2安装JetPack Installing JetPack L4TJetPack L4T runs on the host Ubuntu x86_64 machine and sets up your development environment and Jetson Development Kit target ..._jetson tx1 jetpack
springboot整合rabbitmq实例工程目录结构1.pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"..._springboot整合rabbitmq案例
1. 常见函数1. Shell 通配符from fnmatch import fnmatch, fnmatchcase1.1fnmatch大小写不敏感[具体跟操作系统相关,windows不敏感]print(fnmatch('test.txt', '*.Txt')) --> True1.2fnmatchcaseprint(fnmatchcase('test.txt', '*.Txt')) --> False2. 字符串匹配和搜索str1.startwith(str2) : str_python endwith能正则吗
Ctrl+1快速修复(最经典的快捷键,就不用多说了)Ctrl+D:删除当前行Ctrl+Alt+↓复制当前行到下一行(复制增加)Ctrl+Alt+↑复制当前行到上一行(复制增加)Alt+↓当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑当前行和上面一行交互位置(同上)Alt+←前一个编辑的页面Alt+→下一个编辑的页面(当然是针对上面那条来说了)Alt+Enter显示当前..._eclipse ctrl+shit+/不改变代码格式
CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案,其特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持 get 和 post 请求。跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。原理:CORS通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应后就会对响应放行。实现:(只需在服务端加上响应头)app.all('/cors-server',(_cors头