支付宝支付接口的调用(支付宝支付的实现)
首先,下面是调用支付宝接口的官网:
支付宝开放平台https://open.alipay.com/platform/home.htmhttps://open.alipay.com/platform/home.htm我们这里只演示沙箱环境下的,正式环境需要审核什么的,正式环境与此配置类似,因此不必在意。
进入官网后,首先登录注册,这里不解释了。
第一步:我们需要生成应用公钥和应用私钥
找到下述界面:
注意工具下载,然后根据实际情况下载,我这里是windows,就下载windows的。下载后安装界面(抱歉,这里没图)会出现下面的选项(截图就不了,照着实施就能看到):选择(1)
(1)为使用这台电脑的任何人安装(所有用户)
(2)仅为我安装(Lenovo)
之后下一步,改变到目录名称无空格的路径下,后续就是下一步,安装。
之后打开支付宝开放平台助手,默认页面下点击生成密钥,见到如下图:
记住这里的应用公钥和应用私钥,后面会用到。
下面就是集成并配置SDK
第一步完成后,我们知道了应用公钥和应用私钥,至于有何作用,后面可知。
第二步。内网穿透(内网穿透大致可以理解为是解决内网访问外网,局域网到广域网的问题,相当于是临时域名),这里我们使用NATAPP,类似也有花生壳等软件。见下方链接
NATAPPnatapp是基于ngrok的国内高速内网穿透专业服务商,独家彻底解决ngrok1.7内存泄漏问题.稳定拒绝掉线,适用于微信开发调试,本地架设演示服务器,外网可以访问,远程服务器,远程桌面,远程办公,游戏联机等https://natapp.cn/1.进入官网后,点击客户端下载,如下图
我的是win64的,就下载win64的,下载安装后打开natapp_windows_amd64_2_3_9只有一个natapp.exe,如图。
2.点击教程/文档,然后如下图,同时注意下图的两个标记:
再点击使用本地配置文件config.ini,见下图
在natapp_windows_amd64_2_3_9中创建一个空白文件config.ini(这是一个配置文件),复制下列到config.ini中,也就是图片中见到的。(下列是config.ini的官方原版)
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken= #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
有了authtoken可以不写clienttoken,log改为stdout是为了让他打印日志,日志级别改为DEBUG或INFO,http_proxy为代理设置,没有就不设置,不确定有没有就是没有代理。
由上述可知,我们需要从一个地方知道authtoken,其他参数没有多大问题。
authtoken的来源:
配置好后的:authtoken由于很重要,因此不显示了,大家知道即可。
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=xxxxxxxxx #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=stdout #log 日志文件,可指定本地文件,none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=DEBUG #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
修改config.ini后可双击启动natapp.exe
对于上述,官方也有一分钟教程(见此步第2小点的图的另一个标记)
到此,对于natapp的配置已完成。下面进行测试:(觉得麻烦也可以不测试)
(1)启动tomcat(注意tomcat需要改为80端口,这是natapp的要求,在conf下的server.xml中),然后访问内网穿透URI:80。
server.xml:
<Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
(2)启动natapp.exe,见到cmd窗口。标记就是内网穿透地址,这是临时的,过一段时间就变。(那个URI相当于临时域名)
(3)访问:内网穿透的URI:80
见到tomcat页代内网穿透配置成功。
NATAPP - 连不上 / 错误信息等问题解决汇总_放羊的牧码的博客-CSDN博客
(之后注意暂时不要把tomcat端口改回8080,后续idea启动demo依然要求tomcat端口为80)
第三步:
在“支付宝开放平台开发助手.exe”中已经获得了应用公钥和应用私钥。然后在支付宝开放平台的沙箱环境的沙箱应用中获得应用支付宝公钥。直接见图:注意下图的支付宝网关,后面要用
点击RSA2(SHA256)密钥(推荐),出现以下,公钥就是应用公钥,通过应用公钥得到支付宝公钥
完成上述之后,我们知道了:应用公钥,应用私钥,支付宝公钥(应用公私钥也称为商户公私钥),在后面我们用到了应用私钥和支付宝公钥,应用公钥的目的只是为了通过上述操作获得支付宝公钥,同时我们也知道了支付宝网关(沙箱环境的,整个操作都是在沙箱环境下的)。(支付宝网关正式环境和沙箱环境就差一个dev。)
第四步:找到并下载demo(这个是官方的已经写好的关于调用支付宝支付的java代码,我们需要进行配置,上述三步操作都是为了知道几个配置)
点击SDK与demo下载
点击JAVA版的demo下载,并通过idea或eclipse打开。
第五步:idea打开那个demo,项目结构如下,我们唯一需要修改的只有com.alipay.config下的AlipayConfig
官网原版的未修改的AlipayConfig.java如下:
package com.alipay.config;import java.io.FileWriter;
import java.io.IOException;/* **类名:AlipayConfig*功能:基础配置类*详细:设置帐户有关信息及返回路径*修改日期:2017-04-05*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。*/public class AlipayConfig {//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String app_id = "";// 商户私钥,您的PKCS8格式RSA2私钥public static String merchant_private_key = "";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String alipay_public_key = "";// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";// 签名方式public static String sign_type = "RSA2";// 字符编码格式public static String charset = "utf-8";// 支付宝网关public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";// 支付宝网关public static String log_path = "C:\\";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑/** * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)* @param sWord 要写入日志里的文本内容*/public static void logResult(String sWord) {FileWriter writer = null;try {writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");writer.write(sWord);} catch (Exception e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}
修改后的:
package com.alipay.config;import java.io.FileWriter;
import java.io.IOException;/* **类名:AlipayConfig*功能:基础配置类*详细:设置帐户有关信息及返回路径*修改日期:2017-04-05*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。*/public class AlipayConfig {//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号(使用沙箱环境的APPID)public static String app_id = "xxxxxxx";// 商户私钥(应用私钥),您的PKCS8格式RSA2私钥public static String merchant_private_key = "xxxxxx";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String alipay_public_key = "xxxxxx";// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问// 工程公网访问地址使用内网穿透客户端提供的域名public static String notify_url = "http://nzsgwf.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "http://nzsgwf.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";// 签名方式public static String sign_type = "RSA2";// 字符编码格式public static String charset = "utf-8";// 支付宝网关(正式环境)// public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";// 支付宝网关(沙箱环境)public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";// 日志路径public static String log_path = "C:\\";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑/*** 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)* @param sWord 要写入日志里的文本内容*/public static void logResult(String sWord) {FileWriter writer = null;try {writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");writer.write(sWord);} catch (Exception e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}
应用ID,商户私钥,支付宝公钥,支付宝网关从上述配置都已获得,内网穿透也已获得。
在此之后,开发工具中index.jsp右键run(内网穿透当然要是打开状态下,同时保证内网穿透为最新,那个会变!)
然后访问路径:
支付页http://localhost:8080/alipay_trade_page_pay_JAVA_UTF_8_war_exploded/index.jsp
进入下述界面:
随便输入数据,点击付款:然后可能会出现下面的情况,此时我使用的是谷歌浏览器,我们使用的是沙箱版,然后这或许是浏览器识别的问题,换一个浏览器访问:
支付页http://localhost/alipay_trade_page_pay_JAVA_UTF_8_war_exploded/index.jsphttp://localhost/alipay_trade_page_pay_JAVA_UTF_8_war_exploded/index.jsp
下面使用的是火狐浏览器:
重复上面操作后进入下述界面:
账号密码见此:
输入:
之后下一步进入下述界面:
付款:
然后会自动跳转下面两幅图的其中一个,跳到第一个,是因为内网穿透地址变了,记得关闭并重开(注意:idea里的配置也要改)然后重复流程;跳到第二个返回的是订单号什么的,正常情况下是这个;若返回404NOT FOUND是因为最后跳转的那个return_url.jsp有问题,该文件与idea中index.jsp同级,这个可以改善也没必要改善,这里就不改善了,因为我们主要测试支付宝支付功能,返回的页面功能有机会或有空再搞:
上述就实现了支付宝支付功能的调用,当然是沙箱版的,正式版与此很多过程类似,演示困难。同时 ,要注意:
在把支付宝支付功能的调用整合到项目中时,要注意其订单号有要求
选中上图第一个,下面是对订单号的格式要求
支付宝支付接口的调用(支付宝支付的实现)相关推荐
- h5调用支付宝 php支付源码,友价源码如何集成支付宝H5接口(即支付宝手机支付接口)...
在旧版的友价源码系统中,手机里打开友价程序,用支付宝付款时,还是跳到PC端的付款页面,现在新版的补丁已经改进这个问题,可以直接实现支付宝手机版付款,效果如下: 具体的设置方法请严格按照以下步骤操作,因 ...
- 微信支付接口怎么申请 微信支付接口申请教程
微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏--"微信支付"终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的 ...
- 记录PHP实现第三方支付接口实现方法(发起支付、支付结果回调)
时隔四个月了,这是九月份的第一篇. 记录一下PHP实现第三方支付接口实现方法(发起支付.支付结果回调) 大致实现步骤如下 验签->发起订单请求->获取订单号及付款url->生成支付二 ...
- 支付宝电脑网页支付接口的调用
本次调用支付宝:电脑网页支付方式 首先登陆支付宝开放平台,找到文档中心,下载官方demo 链接地址:https://docs.open.alipay.com/270/106291/ 打开下载好的dem ...
- 支付宝支付之“单笔转账到支付宝账户接口”的调用(生成签名、上传应用公钥、下载SDK、接口调用、报错自动排查、查看错误码)
支付宝接口调用 "单笔转账到支付宝账户"的接口调用,一般涉及到下面几个知识点 1.生成签名 在使用支付宝接口的时候,需要使用支付宝的签名,这里需要使用支付宝的RSA生成工具. 关于 ...
- python 支付宝接口_python调用支付宝支付接口流程
项目演示: 一.输入金额 二.跳转到支付宝付款 三.支付成功 四.跳转回自己网站 在使用支付宝接口的前期准备: 1.支付宝公钥 2.应用公钥 3.应用私钥 4.APPID 5.Django 1.11. ...
- Python 调用支付宝沙箱接口 实现 扫码支付
思路剖析 支付宝开放平台 登录 登陆之后 点击这个 研发服务 然后下载 一个 支付宝沙箱的 移动端 点击左侧的沙箱账号,就可以知道 登录沙箱的 账号和 密码了,也可以 往死充钱.他是可以扫 沙箱收款的 ...
- 支付宝移动支付之IOSApp调用支付宝钱包
最近客户提出要开发一个IOS上的app作为访问他们网站的途径之一,为什么说之一呢,因为目前PC和Mobile这两个站目前都已经上线了. 所以问题就简单了,我们只需要把mobile站UI修改一下,然后在 ...
- 【Vue+DRF生鲜电商】28.支付宝支付接口类解读,支付逻辑编辑
专题:Vue+Django REST framework前后端分离生鲜电商 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频). Github地址:http ...
最新文章
- solr 使用自定义的 QueryParser
- C++的黑科技 利用一个字符对字符串进行分离
- jquery 操作CSS总结
- flash调用swf文件服务器,浏览器如何加载Flash文件? (SWF)
- 架构设计工作笔记002---微服务架构理论-扩展立方体
- Vue 新手引导标签
- 常见的数据分析模型有哪些
- android中的广播机制(动态注册)
- 如何使用CleanMyMac彻底擦除文件?
- Nginx、Apache工作原理以及nginx为何比Apache高效
- 链表的自顶向下归并排序
- 永久删除掉qq安全防护进程q盾
- vim/nvim键盘映射
- HTTP代理和SOCKS代理有什么区别
- R语言画图——添加数学表达式和R2
- 若依前端分离版整合mybatis-plus
- 小程序全局悬浮窗_微信小程序中悬浮窗功能的实现代码
- opc服务器不显示目录,opc客户端搜不到opc服务器
- ligerui demo php,LigerUI的简单使用示例
- 基于ssm小学芙童币和芙童印章管理系统-计算机毕业设计源码文档
热门文章
- 优达学城《无人驾驶入门》学习笔记——卡尔曼滤波器实现详解
- 《游戏改变世界》读后感 一 (懊悔?and我眼中的好游戏)
- 7种延迟加载javascript方法(转)
- linux挂载03磁盘,Linux_常用命令_03_磁盘/挂载_信息查看(示例代码)
- 利用Lazy简化单例模式的编写
- 字节跳动2020春招后端开发工程师笔试复盘
- C语言猜数字游戏实现
- 从业两年时间,我被一个女前端鄙视了!
- 为什么寄存器处理数据的速度比内存快?
- Back-off restarting failed container报错