前言:
最近一直在用node开发网页,也实现了一些小功能,一直想写下来。之前的以后再写,先把刚刚实现的功能写下来,也算是一种经验总结吧!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先报一下开发环境:
OS:Mac OS X 10.11.1
Node: v0.12.7
MongoDB: 3.0.5
Express: 4.12.2
使用Ping++SDK接入支付功能其实不难,跟着官方文档走就行了,不过我们在开发的过程中遇到了一些坑,在这里写出来给大家做一个参考。
首先在router里写一个get来测试一下功能:
router.get('/test', function(req, res) {
res.render('test');
});
然后render到前端的test.jade中,在页面中引入pingpp-pc.js,这个js文件可以在Ping++的github上取得。然后再写一个jQuery ajax(这里写了一个button,由button触发ajax):
$("#btn").click(function(){
$.post('/test', function(resp){
var charge = resp.charge;
pingppPc.createPayment(charge, function (result, err) {
// 处理错误信息
alert(result);
alert(JSON.stringify(err));
});
});
});
在router的post里创建ping++的charge对象,此处一定要注意channel和extra的一致!之前就是因为支付宝的手机端和PC端搞混了就一直报错说是无效的charge。具体参数见Ping++的官方API文档。
create了一个charge对象后,在回调函数里将charge传到client端:
if (err) throw err;
response.charge = charge;
res.set('Content-Type', 'application/json');
res.end(JSON.stringify(response));
其中 response在前面定义了: var response = {};
这里有一点比较奇怪,就是server端传过去的是由JSON结构解析出的字符串,但是在client端得到的却是JSON结构的数据,所以可以直接使用传过来的charge对象实例了。我们之前没有用Ajax,而是直接get请求到client端,无论是直接传JSON结构还是传字符串格式(在client端再解析成JSON格式),到了pingpp那边都会报“json_decode_fail”的错误。换成Ajax来交换数据就可以了…这一点一直不理解,但请大神赐教。
之后直接运行‘www.xxxx.com/test’后按button,一切顺利的话就可以得到如下页面了:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
后记:
第一次写这类技术性的文章,可能有些用词不太准确,技术方面也会有漏洞,也请大家多多指出,共同进步!
参考文档:
Ping++官方文档:https://pingxx.com/guidance