Node实现支付宝网页支付流程(沙箱环境)
支付宝PC端支付接口流程
1、前端点击支付按钮,向后端发起一个ajax请求(get请求,带order_id)
2、后端收到order_id,根据支付宝的规则生成支付的url,返回前端
3、ajax收到成功的响应,从响应中取出url,并向这个url发起请求
4、支付宝的服务器收到请求,返回一个支付页面
5、买家登录账号或扫码进行支付
6、支付宝回调前端的success页面(访问前端的http://127.0.0.1:8080/success?xxx=xx&yy=yy),
这时请求中会携带本次支付结果的相关信息
7、这个success页面获取请求中携带的参数,同时采用ajax的方式向后端发起get请求,携带获取的参数
8、后端验证支付结果,修改订单状态,返回success页面需要的data数据
9、success页面加载数据,展示支付结果
10、为了防止用户在支付之后将页面关掉,支付宝服务器会再隔一段时间向后端发送一个携带支付结果的post请求,
以保证后端能拿到结果,修改订单状态。
一、登录支付宝开放平台,并进入沙箱环境
1.登录
2.进入我的控制台
3.进入开发者中心
4.点击研发服务,进入沙箱环境
PS:若您只是用于个人项目演示,千万不要选择“我的应用”里的“创建应用”,创建完成后(并且审核通过后),产品签约是需要营业执照的,并且应用一旦上线,是无法删除的;
二、创建Node项目
这里使用的是Egg.js
直接使用脚手架,即可快速生成项目
$ mkdir egg-example && cd egg-example
$ npm init egg --type=simple
$ npm i
三、Coding
(1) 设置RSA2密钥
1.1 下载支付宝密钥生成器
1.2 选择密钥格式和长度后,生成密钥
1.3 将生成的公钥填入到沙箱环境的RSA2中
1.4 保存后点击查看,支付宝公钥
(2)Coding
2.1 创建app/controller/alipay.js 和 config/pem/
config/pem/alipay_public_key.pem : 支付宝公钥
config/pem/public_key.pem : 应用公钥
config/pem/private_key.pem : 应用私钥
【注意】将支付宝公钥 alipay_public_key.pem,将上述生成的字符串添加到该文件,并且字符串前后加上秘钥所需描述:“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”
2.2 router.js
"use strict";/*** @param {Egg.Application} app - egg application*/
module.exports = app => {const { router, controller } = app;router.get("/", controller.home.index);router.get("/alipay", controller.alipay.index);
};
2.3 alipay.js
"use strict";const fs = require("fs");
const path = require("path");const AlipaySDK = require("alipay-sdk").default;
const AlipayFormData = require("alipay-sdk/lib/form").default;const Controller = require("egg").Controller;class AlipayController extends Controller {async index() {const { ctx } = this;const alipaySdk = new AlipaySDK({appId: "2**********9", // 你自己的沙箱黄环境的appIdprivateKey: fs.readFileSync(path.join(__dirname, "../../config/pem/app_private_key.pem"),"ascii"), // 私钥signType: "RSA2", // 签名类型alipayPublicKey: fs.readFileSync(path.join(__dirname, "../../config/pem/alipay_public_key.pem"),"ascii"), // 支付宝公钥(不是应用公钥)gateway: "https://openapi.alipaydev.com/gateway.do", // 网关地址timeout: 5000, // 网关超时时间camelcase: true // 是否把网关返回的下划线 key 转换为驼峰写法});/*** 返回支付链接(PC支付接口)*/const formData = new AlipayFormData();formData.setMethod("get");formData.addField("appId", "2**************9");formData.addField("charset", "utf-8");formData.addField("signType", "RSA2");formData.addField("bizContent", {outTradeNo: "1569380127322",// 【必选】商户订单号:64个字符内,包含数字,字母,下划线;需要保证在商户端不重复productCode: "FAST_INSTANT_TRADE_PAY",// 【必选】销售产品码,目前仅支持FAST_INSTANT_TRADE_PAYtotalAmount: "0.01",// 【必选】订单总金额,精确到小数点后两位subject: "test",// 【必选】 订单标题body: "test" // 【可选】订单描述});/*** exec对应参数:* method(调用支付宝api)* params(api请求的参数(包含“公共请求参数”和“业务参数”))* options(validateSign,formData,log)*/const result = await alipaySdk.exec("alipay.trade.page.pay",{},{ formData });console.log(result); // result为可以跳转到支付连接的urlctx.body = result;}
}module.exports = AlipayController;
业务参数
2.4 运行项目
npm run dev
打开 http://127.0.0.1:7001/alipay ,将 result 的结果的链接打开,就可以支付喽
PS:下载沙箱环境里的沙箱版支付宝,登录买家账号,进行支付
Vue node.js实现支付宝支付(沙箱测试)
蚂蚁金服开放平台 node sdk
Node实现支付宝网页支付流程(沙箱环境)相关推荐
- java后端实现集成支付宝APP支付(沙箱环境)
沙箱环境集成支付宝APP支付后端实现 前言 获取支付宝相关信息 整体开发流程 1.获取核心参数 2.将支付宝SDK集成到项目中 3.后台使用支付宝SDK与支付宝进行交互逻辑 1.将支付宝公共信息参数写 ...
- Node接入支付宝开放平台的沙箱实现支付功能
一些重要的支付宝沙箱文档及网址 支付宝开放平台:https://open.alipay.com/ 简单介绍:https://www.yuque.com/chenqiu/alipay-node-sdk/ ...
- 支付宝网页支付交互流程 nest 版
自己整理了一份支付宝网页支付的交互流程 , 完全按交互流程响应步骤介绍的代码,效果图.因为平时主要用node开发,所以服务端用的node,框架是 nest. 用最精简的代码实现支付功能 1,流程图 为 ...
- Python实现支付宝二维码支付(沙箱环境)
Python实现支付宝二维码支付 一.沙箱环境配置 1.登陆蚂蚁金融开放平台:https://openhome.alipay.com 2.选择进入我的开放平台.寻找开发中心的研发服务. 3.点击沙箱环 ...
- SpringBoot - 支付宝支付之沙箱环境简单使用
一.创建应用 使用沙箱环境,可以直接忽略这里,这里只是顺带介绍如何创建应用. 1.进入支付宝开放平台 支付宝开放平台 2.完善信息 3.接入应用 支付宝使用的加密方式 1.对称加密 - 不安全 即加密 ...
- 【SpringBoot深入浅出系列】SpringBoot之实现支付宝扫码支付(沙箱环境编码实现)
目录 一.准备工作 1.应用 APPID 2.商户私钥,即应用私钥 3.支付宝公钥 4.签名方式 5.字符编码格式 6.支付宝网关 二.沙箱环境编码实现 1.项目说明 2.创建 Spring Init ...
- 支付宝支付(2) 电脑网站支付(SpringBoot+沙箱环境+Alipay Easy SDK)
一.前言 支付宝支付(1) 电脑网站支付(SpringBoot+沙箱环境) Alipay Easy SDK 文档 Alipay Easy -> https://github.com/alipay ...
- 项目场景:对接支付宝支付,沙箱环境提示:支付存在钓鱼风险!防钓鱼网站的方法
项目场景:对接支付宝支付,沙箱环境提示:支付存在钓鱼风险!防钓鱼网站的方法 问题描述: 对接中遇到的问题: 原因分析: 提示:浏览器的锅 解决方案: 关闭所有窗口,只打开那个支付页面窗口就可以 转载h ...
- 对接支付宝支付,沙箱环境提示:支付存在钓鱼风险!防钓鱼网站的方法
项目场景:对接支付宝支付,沙箱环境提示:支付存在钓鱼风险!防钓鱼网站的方法 问题描述: 对接中遇到的问题: 原因分析: 提示:浏览器的锅 解决方案: 关闭所有窗口,只打开那个支付页面窗口就可以
- 移动网页支付(微信H5支付和支付宝网页支付)
支付宝网页支付: 1.前端发送(流水号,手机号,产品ID,金额,回调地址,取消地址,支付类型)支付信息给后端, 2.后端组装数据,通过SDK向支付宝发起请求,返回数据给前端. let loc =&qu ...
最新文章
- [BZOJ 2756] 奇怪的游戏
- 程序员的身体一定要好
- 上下文保存 中断_Linux内核中断顶半部和底半部的理解
- App的selenium,Appium爬App!
- java.securti_springboot集成springsecurity 使用OAUTH2做权限管理的教程
- UVALive 4725 Airport(二分)
- Freeswitch视频会议远超Telepresence
- vue 一直显示数据加载中的解决方案之一
- 029--PM话术模板
- Anaconda更新PIP
- zotero中的标准和规范应该用什么类型
- openGauss 训练营第三期结营啦!PPT 85个FAQ大放送!文末附51位结营学员名单
- 修改系统默认 alert 弹框样式
- jsp实现简单用户登录(用户7天内免登录)
- MySQL之mysqlcheck、check、optimize和analyze
- 「Hudi系列」Hudi查询写入常见问题汇总
- rhel7配置smba
- 全球首个3万亿美元公司!苹果实现全球最高市值里程碑
- CBM 业务模型是什么和为什么?
- 模拟电磁曲射炮_H题 方案分析【2019年电赛】【刘新宇qq522414928】
热门文章
- CPU性能排行与评分
- win10的ie保存html文件夹,win10系统IE缓存文件夹在哪里,详细教您IE缓存文件在哪里...
- [WPF] 读取ini中中文字符乱码的解决
- JAVA查询银行卡信息
- C#System.Text.RegularExpressions.Regex使用
- 斯蒂夫乔布斯传札记:第八波
- word文档怎么到下一页去写_word文档怎么插入下一页
- 基于Android手机酒店客房预订系统
- 最新可用ip地址查询接口
- 【趣味实践】Stable Diffusion绘制中秋美景