从支付宝按钮颜色上输入密码支付后,没有点完成按钮,然后把它打到后台,用手机浏览器查询一下东西,请问这个浏览

公司M站要接入支付宝,借机研究了一下支付宝的支付流程。毕竟,只有公司才能拿到支付接口权限。
主要参考文档:
手机网站支付接口
手机网站支付主要应用于手机、掌上电脑等无线设备的网页上,通过网页跳转或浏览器自带的支付宝快捷支付实现买家付款的功能,资金即时到账。
1、您申请前必须拥有企业支付宝账号(不含个体工商户账号),且通过支付宝实名认证审核。
2、如果您有已经建设完成的无线网站(非淘宝、天猫、诚信通网店),网站经营的商品或服务内容明确、完整(古玩、珠宝等奢侈品、投资类行业无法申请本产品)。
3、网站必须已通过ICP备案,备案信息与签约商户信息一致。
假设我们已经成功申请到手机网站支付接口,在进行开发之前,需要使用公司账号登录支付宝开放平台。
1、开发者登录开放平台,点击右上角的“账户及密钥管理”。
2、选择“合作伙伴密钥”,即可查询到合作伙伴身份(PID),以2088开头的16位纯数字。
支付宝提供了DSA、RSA、MD5三种签名方式,本次开发中,我们使用RSA签名和加密,那就只配置RSA密钥就好了。
关于RSA加密的详解,参见《支付宝签名与验签》。
本节可以忽略,本节可以忽略,本节可以忽略!因为官方文档并没有提及应用环境配置的问题。
进入管理中心,对应用进行设置。
上图是我的应用配置选项,公司账号也许会有所不同。具体哪些参数需要配置?请参照,需要什么就配置什么。
Node端发起支付请求
我们公司采用的,就是这种方式,步骤3中Node端获取到的支付宝参数,包括sign。其实,sign的计算工作也可以放在Node端,只不过支付宝没有给出Node的demo,实现起来需要耗费多一点时间。
后端发起支付请求
这种方式也很好,而且,步骤4中后端获取到支付页面,也可以不传给Node端,自己显示出来。这样,整个流程就更加简单。
return_url和notify_url
return_url,支付完成后的回调url;notify_url,支付完成后通知的url。支付宝发送给两个url的参数是一样的,只不过一个是get,一个是post。
以上两种发起请求的方式中,return_url在Node端,notify_url在后端。我们也可以根据需要,把两个url都放在后端,或者都放在Node端,改变相应业务逻辑即可。
Node端详解
Node端发起支付请求有两种选择,一种是获取到后端给的参数后,通过request模块发起get请求,获取到支付宝返回的支付页面,然后显示到页面上;另一种是获取到后端给的参数后,把参数全部输出到页面中的form表单,然后通过js自动提交表单,获取到支付宝返回的支付页面(同时显示出来)。
request发起请求
// 通过orderId向后端请求获取支付宝支付参数alidata
var alipayUrl = 'https://mapi.alipay.com/gateway.do?'+
request.get({url: alipayUrl},function(error, response, body){
res.send(response.body);
理论上完全正确的请求,然而,获取到的支付页面,输出到页面上,却是乱码。没错,还是一个错误提示页面。
神奇的地方在于,在刷新页面多次后,正常了!!!啊嘞,这是什么鬼?
先解决乱码问题,看看报什么错!
request.get({url: alipayUrl},function(error, response, body){
var str = response2.
str = str.replace(/gb2312/, &utf-8&);
res.setHeader('content-type', 'text/charset=utf-8');
res.send(str);
很遗憾,无效!乱码依然是乱码。。。和沈晨帅哥讨论很久,最终决定换一种方案——利用表单提交。
表单提交请求
// 通过orderId向后端请求获取支付宝支付参数alidata
function getArg(str,arg) {
var reg = new RegExp('(^|&)' + arg + '=([^&]*)(&|$)', 'i');
var r = str.match(reg);
if (r != null) {
return unescape(r[2]);
var alipayParam = {
_input_charset: getArg(alidata,'_input_charset'),
body: getArg(alidata,'body'),
it_b_pay: getArg(alidata, 'it_b_pay'),
notify_url: getArg(alidata, 'notify_url'),
out_trade_no: getArg(alidata, 'out_trade_no'),
partner: getArg(alidata, 'partner'),
payment_type: getArg(alidata, 'payment_type'),
return_url: getArg(alidata, 'return_url'),
seller_id: getArg(alidata, 'seller_id'),
service: getArg(alidata, 'service'),
show_url: getArg(alidata, 'show_url'),
subject: getArg(alidata, 'subject'),
total_fee: getArg(alidata, 'total_fee'),
sign_type: getArg(alidata, 'sign_type'),
sign: getArg(alidata, 'sign'),
app_pay: getArg(alidata, 'app_pay')
res.render('artist/alipay',{
// 其他参数
alipayParam: alipayParam
&!--alipay.html--&
&!DOCTYPE html&
&html lang=&en&&
&meta charset=&UTF-8&&
&title&支付宝支付&/title&
&form id=&ali-form& action=&https://mapi.alipay.com/gateway.do& method=&get&&
&input type=&hidden& name=&_input_charset& value=&&%= alipayParam._input_charset%&&&
&input type=&hidden& name=&body& value=&&%= alipayParam.body%&&&
&input type=&hidden& name=&it_b_pay& value=&&%= alipayParam.it_b_pay%&&&
&input type=&hidden& name=&notify_url& value=&&%= alipayParam.notify_url%&&&
&input type=&hidden& name=&out_trade_no& value=&&%= alipayParam.out_trade_no%&&&
&input type=&hidden& name=&partner& value=&&%= alipayParam.partner%&&&
&input type=&hidden& name=&payment_type& value=&&%= alipayParam.payment_type%&&&
&input type=&hidden& name=&return_url& value=&&%= alipayParam.return_url%&&&
&input type=&hidden& name=&seller_id& value=&&%= alipayParam.seller_id%&&&
&input type=&hidden& name=&service& value=&&%= alipayParam.service%&&&
&input type=&hidden& name=&show_url& value=&&%= alipayParam.show_url%&&&
&input type=&hidden& name=&subject& value=&&%= alipayParam.subject%&&&
&input type=&hidden& name=&total_fee& value=&&%= alipayParam.total_fee%&&&
&input type=&hidden& name=&sign_type& value=&&%= alipayParam.sign_type%&&&
&input type=&hidden& name=&sign& value=&&%= alipayParam.sign%&&&
&input type=&hidden& name=&app_pay& value=&&%= alipayParam.app_pay%&&&
&% include ../bootstrap.html %&
&script type=&text/javascript& src=&&%= dist %&/js/business-modules/artist/alipay.js?v=&&&/script&
// alipay.js
seajs.use(['zepto'],function($){
var index = {
init:function(){
var self =
this.bindEvent();
bindEvent:function(){
var self =
$('#ali-form').submit();
index.init();
选择支付宝支付后,成功跳转到了支付宝支付页面,nice!看来这种方案很靠谱。
开始时,打算把alidata直接输出到form表单的action中接口的后面,因为这样似乎最简便。但是,提交表单时,后面的参数全部被丢弃了。所以,不得不得把所有参数放在form表单中。Node端拆分了一下参数,组装成了一个alipayParam对象,这个工作也可以交给后端来做。
显然,request模拟表单提交和真实表单提交结果的不同,得出的结论是,request并不能完全模拟表单提交。或者,request可以模拟,而我不会-_-|||。
值得点赞的是,支付宝给的错误代码很明确,一看就懂。上面这个错误,签名不对。因为我给alipayParam私自加了个app_pay属性,没有经过签名。
微信屏蔽支付宝
以上,大功告成?不!还有一个坑要填,因为微信屏蔽了支付宝!
在电脑上,跳转支付宝支付页面正常,很完美!然而,在微信浏览器中测试时,却没有跳转,而是出现如下信息。
完美解决办法
微信端支付宝支付,iframe改造
该办法的核心在于:把微信屏蔽的链接,赋值给iframe的src属性。
res.render('artist/alipay',{
alipayParam: alipayParam,
param: urlencode(alidata)
&input type=&hidden& id=&param& value=&&%= param%&&&
&iframe id=&payFrame& name=&mainIframe& src=&& frameborder=&0& scrolling=&auto& &&/iframe&
var iframe = document.getElementById('payFrame');
var param = $('#param').val();
iframe.src='https://mapi.alipay.com/gateway.do?'+
然而,在改造时,先是报错ILLEGAL_SIGN,于是利用urlencode处理了字符串。接着,又报错ILLEGAL_EXTERFACE,没有找到解决办法。
暂时放弃,以后如果有了解决办法再补上。
官方解决办法
关于微信公众平台无法使用支付宝收付款的解决方案说明
该方法的核心在于:确认支付时,提示用户打开外部系统浏览器,在系统浏览器中支付。
&!--alipay.html--&
&!DOCTYPE html&
&html lang=&en&&
&meta charset=&UTF-8&&
&title&支付宝支付&/title&
&form id=&ali-form& action=&https://mapi.alipay.com/gateway.do& method=&get&&
&input type=&hidden& name=&_input_charset& value=&&%= alipayParam._input_charset%&&&
&input type=&hidden& name=&body& value=&&%= alipayParam.body%&&&
&input type=&hidden& name=&it_b_pay& value=&&%= alipayParam.it_b_pay%&&&
&input type=&hidden& name=&notify_url& value=&&%= alipayParam.notify_url%&&&
&input type=&hidden& name=&out_trade_no& value=&&%= alipayParam.out_trade_no%&&&
&input type=&hidden& name=&partner& value=&&%= alipayParam.partner%&&&
&input type=&hidden& name=&payment_type& value=&&%= alipayParam.payment_type%&&&
&input type=&hidden& name=&return_url& value=&&%= alipayParam.return_url%&&&
&input type=&hidden& name=&seller_id& value=&&%= alipayParam.seller_id%&&&
&input type=&hidden& name=&service& value=&&%= alipayParam.service%&&&
&input type=&hidden& name=&show_url& value=&&%= alipayParam.show_url%&&&
&input type=&hidden& name=&subject& value=&&%= alipayParam.subject%&&&
&input type=&hidden& name=&total_fee& value=&&%= alipayParam.total_fee%&&&
&input type=&hidden& name=&sign_type& value=&&%= alipayParam.sign_type%&&&
&input type=&hidden& name=&sign& value=&&%= alipayParam.sign%&&&
&div class=&wrapper buy-wrapper& style=&display:&&
&a href=&javascript:void(0);&
class=&J-btn-submit btn mj-submit btn-strong btn-larger btn-block&&确认支付&/a&
&input type=&hidden& id=&param& value=&&%= param%&&&
&% include ../bootstrap.html %&
&script type=&text/javascript& src=&&%= dist %&/js/business-modules/artist/ap.js&&&/script&
var btn = document.querySelector(&.J-btn-submit&);
btn.addEventListener(&click&, function (e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
var queryParam = '';
Array.prototype.slice.call(document.querySelectorAll(&input[type=hidden]&)).forEach(function (ele) {
queryParam += ele.name + &=& + encodeURIComponent(ele.value) + '&';
var gotoUrl = document.querySelector(&#ali-form&).getAttribute('action') + '?' + queryP
_AP.pay(gotoUrl);
}, false);
btn.click();
该页面会自动跳转到同一文件夹下的pay.htm,该文件官方已经提供,把其中的引入ap.js的路径修改一下即可。最终效果如下:
支付宝的支付流程和微信的支付流程,有很多相似之处。沈晨指出一点不同:支付宝支付完成后有return_url和notify_url;微信支付完成后只有notify_url。
研读了一下微信支付的开发文档,确实如此。微信支付完成后的通知也分成两路,一路通知到notify_url,另一路返回给调用支付接口的JS,同时发微信消息提示。也就是说,跳转return_url的工作我们需要自己做。
最后,感谢沈晨帅哥提供的思路和帮助,感谢体超帅哥辛苦改后端。
支付宝开放平台
支付宝开放平台-手机网站支付-文档中心
支付宝WAP支付接口开发
商家服务 - 支付宝 知托付!
微信支付-开发文档
微信端支付宝支付,iframe改造
微信如何突破支付宝的封锁
JavaScript专题(二):深入理解iframe
关于微信公众平台无法使用支付宝收付款的解决方案说明
阅读(...) 评论()9,362被浏览1,010,928分享邀请回答3.8K589 条评论分享收藏感谢收起zhuanlan.zhihu.com/p/20694237--------------------------------------------update
--------------------------------------------话说为啥这个玩意又被翻出来了~其实之前的回答并不太准确,犯罪分子一般从不会盯着某一个人花大力气去搜集资料,控制账号再来盗取资金,因为一般人的资金量并不值得这么做(还一个原因是大多数的犯罪分子本身没什么技术水平,只能做单纯的体力活)。近一年来流行的盗刷手段主要有两种,一种是自己有卡号(账号)密码并且能够直接活的短信验证码,另一种则是自己有卡号(账号)密码但是不能直接获取短信验证嘛。可以看出来,两种手段都有共同点:知道了卡号(账号)密码。很多人会说:我从未透露过账号密码。这个我信,但是总会在一些必要的地方填入卡号和密码吧?比如网银,比如“银行官方活动”?甚至还有“运营商积分返现”?事实上,手机接到的来自运营商(10086等)的积分返现短信,来自银行的所谓“信用卡提额”,“积分返现”,短信尾部留上一个网址,点进去就是兑奖页面,再点进去就要填卡号密码身份证等信息。这就是典型的钓鱼网站,目的就是获取银行卡信息和个人信息。也许有人说,如此低级的骗术根本不会有人上当。我曾经也这么认为。但是从目前的数据来看,受骗人数高的惊人。而更加可怕的是,受害人根本不知道自己已经亲手把自己的密码交给了犯罪分子,一旦发生盗刷,他们根本不会去找犯罪分子的麻烦,而是剑指银行,根本没有人去追究犯罪分子!诚然银行风控有问题,但是自己把密码交给别人,是不是应该承担个主要责任呢?当然了,盗取银行卡号和密码并不只有这一种方式,这只是一种主流方法。下面来说说两种盗刷手段。手点是有卡号密码和短信验证,这没什么可说的,直接转账就好。但很多人会有疑问了,短信怎么来的?其实途径非常多。比如手机木马(钓鱼网站最后的一个步骤就是让受害人下载一个“手机客户端”,其实就是个安卓木马),运营商漏洞,特殊业务(比如10086之前的短信保管箱)等。这些并没有什么特别好的防御方式,主要还是依靠个人的安全意识。很重要的一点是,接到莫名其妙的转账提醒,第一时间挂失银行卡!另一种就比较有意思了,骗子直接拿不到短信验证码,怎么转钱呢?骗子会让受害人自己告诉他。其方法多种多样,在这里只讲近半年来广泛使用的一种。大多数银行都有贵金属和理财业务,而对于银行来说,活期账户里的钱转到理财账户是个风险很小的操作(钱还在客户自己的账户里,没法盗刷),于是很多银行类似的业务并没有提供提醒业务。这就给骗子留下了一点点空间。骗子会先立业已经获得的账号密码,进入网银并转账至理财账户,这时候登录网银,在活期账户里确实会发现钱没了!但其实这时候钱还在个人理财账户,还是受害人的。紧接着骗子会冒充银行或者电商打来电话,称有一笔盗刷已经被拦截。这时大多数人都会去检查自己的账户,于是发现钱丢了!这时骗子会打第二个电话(当然要是刚才没挂电话那更好),告诉受害人,需要一个银行发来的验证码才能退款。这时受害人接到了银行的转账短信验证码,很多人没有注意就提供了验证码,还有一些人虽然注意到是转账验证码,但是一想,反正账户里没钱,也就告诉了骗子。这时一旦告诉了骗子验证码,骗子立刻就会把钱从理财账户转回活期,完成转账操作。这些骗术其实并不高明,但是大多数人发现钱没了,心里一慌,就上当了。不少受害人刚给完验证码便意识到上当,但也于事无补了。要想防骗其实不难:一是提高警惕,不明链接不要点,不要再任何“活动页面”填个人信息,尤其是银行卡密码。收钱是不需要密码的!收钱是不需要密码的!收钱是不需要密码的!二是遇事不要慌,第一时间挂失,第一时间挂失,第一时间挂失,然后再处理。三是不要相信任何主动找上门的电话,一切重要交涉自己查官方公布的电话打过去并录音,一切重要交涉自己查官方公布的电话打过去并录音,一切重要交涉自己查官方公布的电话打过去并录音,来电显示是可以伪造的,但是你拨出去的号码对方控制不了,一切重要交涉以只信任自己拨出的电话。记住这3点,骗子就很难下手了。-------------------------------------------------我是不太正确的原答案分割线-------------------------------------------------从互联网安全角度来说一下吧,从题主的描述来看,很像是社会工程学攻击(如果是真的,题主你是不是惹到谁了……)。简单解释一下社会工程学攻击,其实就是通过各种资料收集,欺骗等手段,获取目标信息的一种方法。这种攻击方式针对性高,目的性强,难度相对小,危害非常大。以国内的网络安全形势来看,大多数在互联网活跃的人(甚至包括互联网上并不活跃但是经常填某些表格的人)只要知道了少量信息,比如手机号,要查出真实姓名,常用密码,常用邮箱,qq甚至身份证号码,并不算太难。这种攻击方式最大的特点在于几乎没有办法完全防御,一旦成功可以控制目标几乎所有身份认证。不要说我危言耸听,前不久和伙伴一起进行研究的时候(授权测试)就成功通过一个手机号(仅仅是知道号码)控制了目标的新浪微博,qq号,邮箱,支付宝账号(没有尝试猜解支付密码,不过可以重置),获取到的信息包括其高中起的履历资料,真实姓名,身份证号码,地址等,而使用到的工具仅仅是网页浏览器而已,甚至没有通过欺骗手段获取更多信息。似乎说了不少,再说一下支付宝安全问题。其实在知道账号密码及支付密码的情况下,支付宝的手机验证码是可以绕过的(已经提交官方),算是个隐患吧。但是个人认为,在支付宝使用独立密码,独立支付密码,绑定数字证书的情况下(绕过手机验证码的前提是未绑定数字证书),是足够安全的。至于题主说的限额绕过我就不知道了~至于短信的问题,只能透露一点,就是手机短信作为验证并不那么安全,和商家和用户无关,也和复制卡无关。最后补充一点,就是大众网络安全和自己的习惯关系非常大,个人表示至今从未被盗过重要账号,没有因账号被盗造成任何损失,前不久倒是丢了个手机,惭愧……2K388 条评论分享收藏感谢收起www.amhl.net Database Error
Discuz! Database Error
已经将此出错信息详细记录, 由此给您带来的访问不便我们深感歉意.手机支付宝钱包
手机支付宝钱包
(C)2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-&2017年3月 .NET技术大版内专家分月排行榜第三2017年2月 .NET技术大版内专家分月排行榜第三2016年9月 .NET技术大版内专家分月排行榜第三2016年8月 .NET技术大版内专家分月排行榜第三2016年7月 .NET技术大版内专家分月排行榜第三2016年3月 .NET技术大版内专家分月排行榜第三2016年1月 .NET技术大版内专家分月排行榜第三2015年12月 .NET技术大版内专家分月排行榜第三2015年11月 .NET技术大版内专家分月排行榜第三
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 支付宝输入密码不显示 的文章

 

随机推荐