lodengo / alipay Goto Github PK
View Code? Open in Web Editor NEWalipay node 支付宝 api 即时到帐收款 担保交易收款
alipay node 支付宝 api 即时到帐收款 担保交易收款
跳转过程中会页面过程会出现一个确定按钮,最好在alipay_submit.class.js的buildRequestForm方法里的确认按钮加个隐藏style,即display: none。
AlipayNotify.prototype.verifyNotify = function(_POST){
if(Object.keys(_POST).length == 0) {//判断POST来的数组是否为空
return false;
}
else{
//生成签名结果
var isSign = this.getSignVeryfy(_POST, _POST["sign"]);
//获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息)
var responseTxt = 'true';
if (null != _POST["notify_id"]) {
responseTxt = this.getResponse(_POST["notify_id"]);
}
//验证
//responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关
//isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关
if (responseTxt == 'true' && isSign) { //preg_match("/true/i",responseTxt)
return true;
} else {
return false;
}
}
}
由于getResponse是异步调用,当getResponse被调用时,responseTxt的值将不确定,因为getResponse方法无返回值~
RT
环境:Mac
crypto.createHash('md5').update(prestr).digest("hex")
改为
crypto.createHash('md5').update(prestr, 'utf8').digest("hex")
我的代码是:
app.post('/user/alipay',userAlipay);//用户支付后,支付宝服务器会调用这个url。
var userAlipay = function(req,res){
var query = req.query;
console.log("hehw");
console.log(query);
res.send("success");
}
query 一直是空对象{},我给支付宝服务器回调的地址是个ip地址,这个有关系吗?
个人在使用时对比了一下php的接口,发现在createLinkstring函数内比php的多了一个substring操作。
我自己在调用接口时,必须把substring后面的-2参数改为-1,否则支付宝端一直报签名错误的信息。
diff --git a/lib/alipay_core.function.js b/lib/alipay_core.function.js
index 848dc02..4ebff51 100644
--- a/lib/alipay_core.function.js
+++ b/lib/alipay_core.function.js
@@ -101,6 +101,7 @@ exports.logResult = function(word){
@param input_charset 编码格式。默认值:空值
return 远程输出的数据
*/
exports.md5Verify = function(prestr, sign, key){
prestr = prestr + key;
if(mysgin == sign) {
return true;
@@ -49,4 +49,4 @@ exports.md5Verify = function(prestr, sign, key){
else {
return false;
}
-}
+}^M
diff --git a/lib/alipay_notify.class.js b/lib/alipay_notify.class.js
index fbb4e40..dea9b56 100644
--- a/lib/alipay_notify.class.js
+++ b/lib/alipay_notify.class.js
@@ -104,7 +104,7 @@ AlipayNotify.prototype.getSignVeryfy = function(para_temp, s
var para_sort = core_funcs.argSort(para_filter);
//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
var isSgin = false;
如果在subject里面放入中文,回调的时候会以乱码的形式存在,这个时候验证必定失败,java里面是params.put(name, new String (valueStr.getBytes("ISO-8859-1"),"UTF-8")),不知道node里面怎么处理
aliplay_notify.class.js里AlipayNotify.prototype.getSignVeryfy函数中有一个BUG
var prestr = createLinkstring(para_sort);
应改为
var prestr = core_funcs.createLinkstring(para_sort);
配置好partner和key之后,运行担保交易的结果如下:
Express server listening on port 3000
GET / 200 30ms - 407
HEAD / 200 5ms - 407
GET /create_partner_trade_by_buyer 304 17ms
GET /images/new-btn-fixed.png 200 11ms - 5.76kb
GET /method=post?WIDout_trade_no=123&WIDsubject=11&WIDprice=1&WIDquantity=1&WIDlogistics_fee=1&WIDlogistics_type=EXPRESS&WIDlogistics_payment=SELLER_PAY&WIDbody=&WIDshow_url=&WIDreceive_name=&WIDreceive_address=&WIDreceive_zip=&WIDreceive_phone=&WIDreceive_mobile= 404 5ms
HEAD /method=post 404 2ms
下单的时候按理说是该POST的,但还是GET,请问是为什么呢?
顺便请问下,我希望通过http传递数据到后台后直接返回一个http地址然后打开就是支付宝付款的地址,请问应该如何实现呢?现在的方法都是要用到res的
error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib 即时收款,回调报错了,请帮解答一下
支付宝官方的phpdemo中提供的是 rsa的加密方式,请问nodejs为啥用了md5的加密方式;支持rsa的加密的方式么?
感觉这个代码现在没人维护啊
在开发一个个人商店,准备用这个库。我的想法是对照官方PHP的实现方法来修改。由于我还没到支付这一步,我也不能给出答案了。
需要在nodejs上实现手机网站支付接口,github上有很多nodejs支付宝接口,但这个是被star最多的,可好像没人维护了。过来的人可否知道目前是这个最好用的么?或者说是有谁的fork是比较靠谱的?谢谢!
严格来说这不是一个BUG,极有可能是支付宝改了规则,而没有即时修改代码,就是下面这两行代码,也是aliplay_notify.class.js里
this.http_verify_url = 'https://mapi.alipay.com/gateway.do?service=notify_verify&';
this.http_verify_url = 'http://notify.alipay.com/trade/notify_query.do?';
先说问题吧,如果不改现在的支付宝,当支付成功后回调回来时候就会挂掉。经与支付宝沟通后,这个问题是这样的,notify.alipay.com/trade/notify_query.do这个接口不能在443端口下工作,他倒是可以在80端口下工作,但我不知道返回结果是怎样的,支付宝推荐使用https那个URL,而且他是支持443端口的,所以我就不管是否是http服务器,都使用https的notify,另外如果能使用https服务器就用https服务器,我倒是想用,但是不知道如何分发证书
1.for initAlipayConfig,(partner,key,seller_email,host,transport,cacert,input_charset,sign_type) are needed.
2.cacert can be found in offical's PHP's demo,pay attention to path.
3.transport should be set as https
4.To use notify/return ,please append a line in alipay.js
exports.AlipayNotify =AlipayNotify;
so you could use
var AlipayNotify = require('alipay').AlipayNotify,
so that
alipayNotify.verifyNotify or alipayNotify.verifyReturn
is ok
5.one more thing,alipayNotify.verifyNotify use post,please use req.body to get post content
因为它会把你的所有参数urlencode了,而支付宝要求hash之前的待签名字符串不能urlencode
另外,AlipaySubmit.prototype.buildRequestForm这个方法通过构建form表单,然后让浏览器提交的方式构造请求,这种做法相当奇葩,不知道作者有意为之,还是无耐之举,有意思,哈哈哈。
哦,另外,作者的代码里的局部变量前面都木有var 声明,这样会变成定义一个模块内的全局变量。不知道作者的用意何在。我觉得还是比较危险,建议修正。
总得来讲,东西还是挺简单易用的,谢谢。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.