NodeJS 怎么webstorm集成nodejs支付宝付款

主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
微信ID:ToFeelings
公众号「IT小圈儿」
优秀是一种品质,卓越是一种境界。
浮躁的心不会积淀出成功的土壤,清幽的路上风景更美好!
目标全栈工程师
精灵云,专业的容器云管理平台。
Q*Q ▌▌网?站?怎?么?接?入?第?三?方?支?付?平?台?收?款?如?支?付?宝?支?付?宝?免?接?口?只?提?供?个?人?账?户?就?可?以?实?现?即?时?到?帐,想?制?作?一?个?支?付?宝?免?接口只?提?供?个?人?账?户?就?可?以?实?现?即?时?到?帐?的?ASP?或?PHP?软?件?可?以?联?系?我,如?果?可?以?独?立?性?最?好,如?果?不?能?独?立?可以?提?供?我?自?行?安?装?也?可?以!个?人?怎?么?申?请?支?付?宝?支?付?接?口?个?人?网?站?怎?么?通?过?支?付?宝?即?时?付?款?接?口?,?需?要?什?么?,?支?付?宝手?机?网?页?即?时到?账?接?口?扫?码?接?口?申?请?+?出?售
?现?在?提?供?只?需?您?提?供?您?的?个?人?支?付?宝?,?我?们?用?企?业?实?名?认?证?的?支?付?宝?商?户?号?帮?您?个?人?进?行?关?联?让?您?的?支?付?宝?拥?有?即?时?到?帐?功?能?收?款?到?您?的?个?人?账?户?,?资?金?又?您?操?作?无?需?第?三?方?,?支?付?宝?即?时?到?账?免?签?约?接?口?,?能?让?您?的?个?人?支?付?宝?账?号?实?现?和?企?业?支?付?宝?一?样?的?即?时?到?账?收?款?功?能?,?且?接?口?免?签?约?、?即?开?即?用?、?高?效?安?全?多?通?道?,款?项?即?充?即?到?,?个?人? ?支?付?宝? ?免?签?约? ?0?手?续?费? ?无?需?申?请? ?即?时?到?帐?接?口???支?付?宝?免?签?约?个?人?及?时到??帐?接?口?和?企?业?一?样?的?接?口??个?人?开?发?者? ?支?付?宝?个?人??支?付?宝?即?时?到?帐? ?个?人?支?付?宝??即?时?到?账? ?
?个?人?支?付?宝?即?时?接?口? ?支?付?宝?即?时?付??款 ?个??人?个?人?支?付?宝?即?时?收??款Chair:支付宝前端团队推出的Node.js Web框架
Chair是支付宝前端团队推出的,基于Node.js的Web框架,适用于大部分的Web应用。本文简要介绍Chair的设计思想、功能架构和开发状况。一、Chair的由来和设计思想历史上,支付宝前端项目都是直接基于Java后端开发的。这种架构下,前端工程师做出网页模板(基于velocity模板引擎的vm文件),交给后端的Java引擎渲染。支付宝采用的Java引擎是名为Sofa的MVC框架。对于前端工程师来说,这种架构有很多不方便的地方。首先,需要了解后端的实现,并且依赖开发环境中的dev服务器进行调试开发;其次,开发细节需要与后端的
Java工程师沟通,交流成本相当大;最后,难以发起技术创新,因为只要涉及后端的调整,推动起来非常困难。在前端技术日新月异的今天,这已经越来越成为
前端工程师心中的痛。Chair框架就是在这种背景下诞生的,我们希望通过加入一个Node层,加速前端开发,提升研发效率,提高网站整体性能和系统的可维护性。作为Sofa的替代,Chair直接与底层的Java服务通信,而客户端浏览器则与Chair通信,这样就不使用Sofa了。前端工程师因此可以完全不碰Java,使用熟悉的JavaScript语言,同时在浏览器和服务器两端进行快速迭代。事实上,Chair这个名字就是来自跟Sofa的对比,因为两者都能坐人,但是椅子(Chair)比沙发(Sofa)轻多了。支付宝已经有了沙发,我们想再为它添一把椅子。Chair为前端开发,带来了很多便利。提高了研发效率,前端工程师直接可以改动服务器,避免了与Java后端不必要的沟通成本。更清晰的职责划分,前端针对表现层(View)开发,后端针对业务和数据(Controller和Model)开发。更好的?程化,前端自己就能完成单元测试、集成测试和自动发布。节省人工,同样的组件(比如模板和路由)只需要写一次,不用再为浏览器和服务器各写一遍了。预期的性能提升,Node作为服务器端时,有很强的HTTP请求处理能力。目前,Chair已经投入了生产环境,与Sofa各自支持着不同的支付宝Web应用。预计不远的将来,会出现更多基于Chair的Web应用。二、Chair的结构Chair的基础代码,是基于Koa框架的再开发,使用的语言是下一代JavaScript——ECMAScript 6,模板引擎是Nunjucks,但也可选用其他引擎。同时兼容Velocity模板,现有绝?部分模板?件?需修改也能正常渲染。整个框架从浏览器到服务器,一共分成五层:路由层(routers):适配不同路径的HTTP请求中间件层(middlewares):加工HTTP请求控制器层(controllers):部署业务逻辑服务层(services):提供内部的统一API,供不同业务调用代理层(proxy):负责与Java服务通信,提供统一格式的数据除了模板引擎以外,Chair还部署了一些功能组件,比如mock(数据模拟)和logger(日志器)。Chair根据业务实际需求和现有架构高度定制。虽然从结构上看,Chair可以提供完整的后端功能,但目前主要用于模板渲染和路由。真正的业务逻辑和数据处理,还是要交给后端的Java服务。&三、性能提升Node的加入,为很多功能提供了很大的性能改进。根据压测的结果,使用Chair(下图的web)比使用原来的方案(下图的portal),响应时间和系统负载能力至少提高一倍以上。四、Chair的开发进度12月上旬,Chair发布了0.5版。除了修正Bug,这一版主要添加了以下功能。支持 cookie session, 不依赖 tair支持连接 MySQL数据库支持mvc stat 和 rpc stat 日志统计支持统一导航 uninav 模板页面数据模拟 pagemock目前,Chair正处于密集开发之中,预计明年上半年发布1.0.0版。该文章来自阿里巴巴技术协会(ATA)精选集,作者:兔哥。文章链接——云栖社区:
转载请注明:文章转载自 开源中国社区
本文标题:Chair:支付宝前端团队推出的Node.js Web框架
本文地址:
引用来自“若水尘埃”的评论兼容个屁啊,这是后端框架。引用来自“中奖啦”的评论。。。。呼呼哈哈
引用来自“独孤青冥”的评论你咋不提ie6呢,多么古老的玩意啊引用来自“隔壁家老王”的评论IE5-能兼容不?引用来自“Chriesh”的评论老王,你又来捣乱了,隔壁的不孕不育夫妇你帮他们搞定了吗?早就生了,还有隔壁小冯,五一才认识他现在的老婆,这2天也快生了,,,,,,老王,殖得拥有
引用来自“独孤青冥”的评论你咋不提ie6呢,多么古老的玩意啊引用来自“隔壁家老王”的评论IE5-能兼容不?老王,你又来捣乱了,隔壁的不孕不育夫妇你帮他们搞定了吗?
引用来自“coolcao”的评论我擦,php,这个世界上最好的语言,淘宝估计降不住啊 引用来自“eechen”的评论/index.php/index.php/search_product.htm?q=xiaomi/search_product.php?q=xiaomi/market/sport/citiao/paobuxie.php首页,搜索页,活动页都是PHP驱动,PHP怎么会扛不住呢?而且不是还有鸟哥的PHP7么?性能杠杠的.我一下喷你一脸老血,PHP后缀的就是开发的?我能说可以随便改吗?你是不是认为 .java或者.jsp才是java开发的,我是PHP程序猿,我感觉PHP开发效率快,但是性能,呵呵,自己去查!
引用来自“中奖啦”的评论中途岛是淘宝在搞吧引用来自“grath”的评论感觉就是中途岛哇引用来自“中奖啦”的评论前年的 D2 大会上,这两个东西都出现了,一个是淘宝的赫门分享的中途岛,另一个就是支付宝的苏千分享的 Chair。不知道那个大会 多谢指点
引用来自“中奖啦”的评论中途岛是淘宝在搞吧引用来自“grath”的评论感觉就是中途岛哇前年的 D2 大会上,这两个东西都出现了,一个是淘宝的赫门分享的中途岛,另一个就是支付宝的苏千分享的 Chair。
引用来自“coolcao”的评论我擦,php,这个世界上最好的语言,淘宝估计降不住啊 /index.php/index.php/search_product.htm?q=xiaomi/search_product.php?q=xiaomi/market/sport/citiao/paobuxie.php首页,搜索页,活动页都是PHP驱动,PHP怎么会扛不住呢?而且不是还有鸟哥的PHP7么?性能杠杠的.你的位置: >
> 安卓项目集成支付宝【原创】
之前讲了一篇博客关与支付宝集成获取支付宝公钥与商户私钥的博客。这一片讲的是如何在项目中集成支付宝。首先要运行我们的Demo.就是配置好公钥与私钥的Demo。只要Demo 运行起来了,那么接下来,就是如何移植代码的问题了。
将Demo中libs 文件夹下面的支付宝jar 包拷贝到 所需要引入的项目中的libs 文件下,如果没有此文件,可以自己在项目中新建libs 文件,并将sdk的jar包引入其中。
配置AndroidManifest.xml文件。此文件大都是配置信息的。集成支付宝,当然也不例外。下面的代码也是从Demo中拷贝过来的,信息如下:
&!-- alipay sdk begin --&
android:name=&com.alipay.sdk.app.H5PayActivity&
android:configChanges=&orientation|keyboardHidden|navigation&
android:exported=&false&
android:screenOrientation=&behind&
android:windowSoftInputMode=&adjustResize|stateHidden& &
&/activity&
&!-- alipay sdk end --&
可以看到的是这是一个Activity.配置文件。就如平常的注册Activity 一样,放在application节点之中即可。下面是权限的配置:
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
这是必要的权限,如果添加过的,就不需要重新添加了。没有的,则需要添加到里面。
拷贝java文件,同样是Demo 文件中,在你需要引入支付宝的项目中新建一个包,来存放必须要的java 文件。分别是下面几个文件: Base64.java,PayResult.java与SignUtils.java 文件,我下载的是alipaySDK-.jar 的jar 包。只需要引入这些文件即可。
下面就是主要Activity的代码的引入了。主要代码如下:
public static final String PARTNER = &注册账户的PID&;
// 商户收款账号
public static final String SELLER = &支付宝收款账户&;
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = &商户私钥&;
// 支付宝公钥
public static final String RSA_PUBLIC = &支付宝公钥&;
private static final int SDK_PAY_FLAG = 1;
private static final int SDK_CHECK_FLAG = 2;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((String) msg.obj);
// 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, &9000&)) {
Toast.makeText(PayDemoActivity.this, &支付成功&,
Toast.LENGTH_SHORT).show();
// 判断resultStatus 为非“9000”则代表可能支付失败
// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, &8000&)) {
Toast.makeText(PayDemoActivity.this, &支付结果确认中&,
Toast.LENGTH_SHORT).show();
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(PayDemoActivity.this, &支付失败&,
Toast.LENGTH_SHORT).show();
case SDK_CHECK_FLAG: {
Toast.makeText(PayDemoActivity.this, &检查结果为:& + msg.obj,
Toast.LENGTH_SHORT).show();
这段代码,是一个Handler,放在Java 文件的顶部。
* call alipay sdk pay. 调用SDK支付
public void pay() {
String orderInfo = getOrderInfo(&测试的商品&, &该测试商品的详细描述&, &0.01&);
// 对订单做RSA 签名
String sign = sign(orderInfo);
// 仅需对sign 做URL编码
sign = URLEncoder.encode(sign, &UTF-8&);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
// 完整的符合支付宝参数规范的订单信息
final String payInfo = orderInfo + &&sign=\&& + sign + &\&&&
+ getSignType();
Runnable payRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(PayDemoActivity.this);
// 调用支付接口,获取支付结果
String result = alipay.pay(payInfo);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
* check whether the device has authentication alipay account.
* 查询终端设备是否存在支付宝认证账户
public void check(View v) {
Runnable checkRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask payTask = new PayTask(PayDemoActivity.this);
// 调用查询接口,获取查询结果
boolean isExist = payTask.checkAccountIfExist();
Message msg = new Message();
msg.what = SDK_CHECK_FLAG;
msg.obj = isE
mHandler.sendMessage(msg);
Thread checkThread = new Thread(checkRunnable);
checkThread.start();
* get the sdk version. 获取SDK版本号
public void getSDKVersion() {
PayTask payTask = new PayTask(this);
String version = payTask.getVersion();
Toast.makeText(this, version, Toast.LENGTH_SHORT).show();
* create the order info. 创建订单信息
public String getOrderInfo(String subject, String body, String price) {
// 签约合作者身份ID
String orderInfo = &partner=& + &\&& + PARTNER + &\&&;
// 签约卖家支付宝账号
orderInfo += &&seller_id=& + &\&& + SELLER + &\&&;
// 商户网站唯一订单号
orderInfo += &&out_trade_no=& + &\&& + getOutTradeNo() + &\&&;
// 商品名称
orderInfo += &&subject=& + &\&& + subject + &\&&;
// 商品详情
orderInfo += &&body=& + &\&& + body + &\&&;
// 商品金额
orderInfo += &&total_fee=& + &\&& + price + &\&&;
// 服务器异步通知页面路径
orderInfo += &&notify_url=& + &\&& + &http://notify.msp.hk/notify.htm&
// 服务接口名称, 固定值
orderInfo += &&service=\&mobile.securitypay.pay\&&;
// 支付类型, 固定值
orderInfo += &&payment_type=\&1\&&;
// 参数编码, 固定值
orderInfo += &&_input_charset=\&utf-8\&&;
// 设置未付款交易的超时时间
// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
// 取值范围:1m~15d。
// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
// 该参数数值不接受小数点,如1.5h,可转换为90m。
orderInfo += &&it_b_pay=\&30m\&&;
// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
// orderInfo += &&extern_token=& + &\&& + extern_token + &\&&;
// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
orderInfo += &&return_url=\&\&&;
// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
// orderInfo += &&paymethod=\&expressGateway\&&;
return orderI
* get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范)
public String getOutTradeNo() {
SimpleDateFormat format = new SimpleDateFormat(&MMddHHmmss&,
Locale.getDefault());
Date date = new Date();
String key = format.format(date);
Random r = new Random();
key = key + r.nextInt();
key = key.substring(0, 15);
* sign the order info. 对订单信息进行签名
* @param content
待签名订单信息
public String sign(String content) {
return SignUtils.sign(content, RSA_PRIVATE);
* get the sign type we use. 获取签名方式
public String getSignType() {
return &sign_type=\&RSA\&&;
这一段代码要和上一段代码放在一个Java 文件中,需要注意的一个方法是。 pay() 方法和getOrderInfo(); 需要注意的是,在我们选择支付宝支付的按钮中调用的 是 pay() 方法。而放在pay()方法中则需要调用getOrderInfo(),仔细发现,getOrderInfo()方法里面的三个参数。其中price 参数就是我们要消费的金额,当我们调用pay()方法的时候,就需要传入一个price 的参数,就是我们需要支付的金额。具体的金额怎么传入,计算,要根据项目需要来自己获取了,这样项目集成支付宝就圆满结束了。
本文永久地址:/12323.html本文出自
,转载时请注明出处及相应链接。
与本文相关的文章NODE.JS连接支付宝
easy-alipay
alipay payment & notification APIs
easy-alipay
Nodejs based Alipay payment & notification APIs
Payment.createDirectPay()
Create an Ali direct payment, return an Ali url so client can go to Ali pages to process payments.
javascript 代码效果预览var alipay = require('easy-alipay').P
var paymentUrl = alipay.createDirectPay(partnerId, partnerKey, sellerEmail, requestData.subject,
requestData.outTradeNumber, requestData.totalFee, requestData.body, requestData.showUrl,
notifyUrl, returnUrl);
Payment.createDirectPayWap()
Returns an promise. WAP version of Payment.createDirectPay(), which submit a XML format request to ALIPAY and returns an redirect url with valid request token.
Notification.directPayNotify(notification, partnerId, partnerKey)
Returns an promise which resolve with a JSON version of ALIPAY payment notification, and reject when the notification is not from ALIPAY or signature verification failed.
javascript 代码效果预览var alipayNotification = require('easy-alipay').N
alipayNotification.directPayNotify(notifyData, partnerId, partnerKey);
} catch (err) {
console.error(err);
} Notification.directPayNotifyWap(notification, partnerId, partnerKey)
WAP version of Notification.directPayNotify(), which accepts a XML format payment notification.
转载来源:/home/feature/easy-alipay#paymentcreatedirectpay
2 总笔记数
1162 总阅读量
Copyright &
All Rights Reserved.
合作伙伴:

我要回帖

更多关于 webstorm集成nodejs 的文章

 

随机推荐