微信支付宝微信收款码合并访诃

5590人阅读
支付宝(1)
都知道支付宝支付在不同环境下分好多种,本文介绍的是&&如何接入。至于如何开通支付宝,审核等步骤,请查阅其他文档。本文使用的是其中JAVA版接入。
由于微信“封杀”了支付宝支付,支付宝给出了&&解决方案,本文介绍如何接入。
文档中,主要有用的是2个文件pay.html、ap.js.另外两个demo_get.htm,demo_post.htm是测试用例。
接入参考demo_get.htm,主要遇到的问题:
1.代码pay.htm有小错误
2.引入路径问题
3.如何引入ap.js和参数加引号
4.URLEncoder
1.代码pay.htm有错:
第四行修改为&meta charset=&utf-8&/&
2.引入路径问题:
如果是使用的JAVA版接入微信,且使用JSP方式生成自动submit的表单内容。那么请在JSP存放的路径拷贝进去pay.html、ap.js两个文件。
3.如何引入ap.js和参数加引号:
如何引入ap.js
* 建立请求,以表单HTML形式构造(默认)
* @paramALIPAY_GATEWAY_NEW 支付宝网关地址
* @param sParaTemp 请求参数数组
* @param strMethod 提交方式。两个值可选:post、get
* @param strButtonName 确认按钮显示文字
* @return 提交表单HTML文本
public static String buildRequest(String ALIPAY_GATEWAY_NEW, Map&String, String& sParaTemp, String strMethod, String strButtonName) {
//待请求参数数组
Map&String, String& sPara = buildRequestPara(sParaTemp);
List&String& keys = new ArrayList&String&(sPara.keySet());
StringBuffer sbHtml = new StringBuffer();
//添加微信 兼容性
sbHtml.append(&&script type='text/javascript' src='ap.js'&&/script&&);
sbHtml.append(&&form id=\&alipaysubmit\& name=\&alipaysubmit\& action=\&& + ALIPAY_GATEWAY_NEW
+ &_input_charset=& + AlipayConfig.input_charset + &\& method=\&& + strMethod
for (int i = 0; i & keys.size(); i++) {
String name = (String) keys.get(i);
String value = (String) sPara.get(name);
sbHtml.append(&&input type=\&hidden\& name=\&& + name + &\& value=\&& + value + &\&/&&);
//submit按钮控件请不要含有name属性
sbHtml.append(&&input type=\&submit\& value=\&& + strButtonName + &\& style=\&display:\& onclick=\&sendTo()\&&&/form&&);
String prestr = createLinkStr(sPara);
String str = ALIPAY_GATEWAY_NEW +
sbHtml.append(&&script&function sendTo(){&
+ &_AP.pay(\&&+ str +&\&);&
+ &};sendTo();&/script&&);
sbHtml.append(&&input type=\&submit\& value=\&& + strButtonName + &\& style=\&display:\&&&/form&&);
sbHtml.append(&&script&document.forms['alipaysubmit'].submit();&/script&&);*/
return sbHtml.toString();
public static String createLinkStr(Map&String, String& params) {
List&String& keys = new ArrayList&String&(params.keySet());
Collections.sort(keys);
String prestr = &&;
for (int i = 0; i & keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
value = URLEncoder.encode(value, AlipayConfig.input_charset);
} catch (UnsupportedEncodingException e) {
if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
prestr = prestr + key + &=& +
prestr = prestr + key + &=& + value + &&&;
代码片段 &+ &_AP.pay(\&&+ str +&\&);& 中 str 变量两侧要有 \& ,不光是str变量要是字符串,还要用引号包起来。
4.URLEncoder
createLinkStr方法是拼装字符串的作用,拼装的同时,要为每个value都进行URLEncoder.encode
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9928次
排名:千里之外
(3)(1)(2)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'草原上的两匹马!
打从当年微信开始布局公众号之初时,估计就已经想到了与支付宝正面冲突的场面,所以微信先来个瞒天过海,在春晚搞了个微信红包,那叫一个火呀,此时的云云隐隐感觉到些许不安。
早期的微信开发者可能都知道,微信公众号刚开始的时候接入支付要交巨额的保证金,根据行业不同,金额也不同,但也有大几万呢。这让很大一部分微型企业望而却步(老子创业时,注册公司的注册资金都免了,用个支付,你还要保证金),所以,大家果断用支付宝。
这样一来,腾哥的如意算盘算是打到自己脚面了,本打算可以用企业交的保证金拿去做网贷的,可是大家不买账。不买账也就算了,竟然用竞争对手的,这厮气的直抓屁股,怎么办呢?腾哥灵机一动,既然大家不想交保证金,那咱们干脆免费吧。
好嘛,俗话说的话,天下没有免费的午餐,要免费可以,但你要先认证(乖乖交300大洋,腾哥是贼心不死呀,3w交不起,300总交得起吧)。于是乎,微信支付的商家开通量确实是有了一个稳定的增长。
&为毛每个月还是有那么多的流量流到支付宝呢?&,腾哥怒目圆睁,瞪着小龙哥。小龙哥委屈的都快尿了,躲在一边的墙角,低声道:&他们都说咱们的文档太烂了,他们看不懂,不知道怎么开发&。
&我不想听解释,你知道我要的是什么!!&,腾哥依旧不依不饶。但望着墙角的小龙,基情油然而生,仿佛动了恻隐之心。不忍再责备小龙,扬长而去。
一言不合就屏蔽!
话说,自从那日小龙哥被腾哥狗血喷头后,百思不得姐,头发都要掉光了。眼看下周公司例会在即,如再想不到解决方式,恐怕帅位不保呀。思来想去,唯有兵行险招,老子玩不过你,就不让你来我家玩。于是乎,一夜之间,所有从微信里跳转到阿里系的域名均无法打开。不管怎样,从微信端流入支付宝的流量起码表面上看起来好看的多,腾哥与小龙哥也恢复了往日的基情岁月。
流氓不可怕,就怕流氓有文化
"报告马总,近日深圳龙腾作怪,堵我流量入口,众开发者怨声载道,这可如何是好,咱不能弃咱们的衣食父母而不顾呀"
马总此时刚练完一日一贱《独孤九贱》,忽听探子来报,竟有人堵我粮道,岂有此理。大手一挥,写下几个大字&吾乃风清扬,从小做流氓,对我耍流氓,让他直喊娘&。交于探子。此探子虽说学识渊博,可也无从揣摩马总心思,正要走时,忽见字的背面若隐若现,定睛一看,着实惊喜万分,这就是传说中的《独孤九贱》呀。
第一式:工欲善其事必先利其器
想在微信里使用支付宝支付,那么,首先你要有个支付宝账号,并申请开通了《手机网站支付接口》,申请地址是:/signing/productDetail.htm?productId=I0001001
第二式:北冥神功
成功的捷径就是,拿别人造好的轮子装在自己的车上,北冥神功也是此道理。支付宝的开发人员真的是善良的,深知一众屌丝开发者苦逼至极,为了更方便的接入支付宝支付,人家把代码封装的傻瓜化。这才是咱们需要的嘛,我就是想要在我的网站里接个支付而已,干嘛去让我搞一堆百年不用一次的什么md5,sha1,公钥,密钥等等。多点真诚,少点套路才是道理。支付的demo的下载地址是:
https://doc./doc2/detail?treeId=60&articleId=103564&docType=1
下载完成后,解压压缩包,压缩包中有两个文件夹,分别是:MD5签名方式与RSA签名方式,本king推荐用MD5方式,接入简单,不要问我为什么!有钱!任性!
第三式:连城诀
接口权限申请了,demo也有了,那咱们就只需要把demo中的参数换成自己的就行了。
首先,在代码的AlipayConfig中配置合作者身份ID与MD5密钥(C#语言,其他语言类似)。这两个参数需要登录支付宝,在《商家服务》页面查看。如下图:
一路火花带闪电地配置完后,咱们就可以手机端浏览了。如下图:
484很简单, 484很清爽,484很傻瓜化。
腾哥,赶紧让你的小弟看看,啥叫善待自己的衣食父母,赶紧擦亮你们尔等的钛合金狗眼。
额,貌似嘚瑟太早,容易闪着腰,点击平【确认】按钮之后的页面,顿时差点吓得生活不能自理。见下图:
这是什么鬼,宝宝年纪小,看不懂英文。城市套路深,我要回农村&&~~~~(&_&)~~~~
第四式:凌波微步
俗话说的话,你贱我三分,我贱你一丈。云哥可是懂八国英语的人。毕竟在别人家地盘,不让我玩,我就翻你家墙头。
快跟着我一起来,左手右手一个慢动作&&。
新一代全国程序员广播体操现在开始:
1、找到支付宝的机器人。(纳尼?你找不到,好吧,我来教你。)
在支付宝页面的《签约管理》的右边,有个机器人头像,看着了吧。
磨叽啥,赶紧点,进去之后,二话不说,直接发送&微信中使用支付宝&,奇迹的时刻就要到了:
云哥的给力,衬托出腾哥就是比较疼。传送门已经给我们了,赶紧进去看看秘籍吧。
进入页面后,会有一个征讨微信的说明,大概意思就是,腾哥刷流氓,云哥心不爽,云哥尽心力,教咱去他墙。
赶紧下载方案文件,解压后有惊喜。
一个文件变成了多个文件,是不是很神奇&&
额,其他的文件咱都不看了, 有兴趣修炼的话,自己研究去。现在跟着我做下个动作,伸展运动&&
2.打开【alipay_in_weixin工具说明】文件夹,将文件中的ap.js和pay.htm文件拷贝到项目中,注意要放到同一个文件夹哦。
然后,由于支付宝给的代码是使用表单html形式提交的数据,这个不太适合集成这个插件。咱们稍微改动下。
首先,在AlipaySubmit类中,找到BuildRequestParaToString方法,将private改成public,然后return的时候,加上支付宝的网关地址。改之后的代码如下所示:
public static string BuildRequestParaToString(SortedDictionary&string, string& sParaTemp, Encoding code)
& & & & & & //待签名请求参数数组
& & & & & & Dictionary&string, string& sPara = new Dictionary&string, string&();
& & & & & & sPara = BuildRequestPara(sParaTemp);
& & & & & & //把参数组中所有元素,按照&参数=参数值&的模式用&&&字符拼接成字符串,并对参数值做urlencode
& & & & & & string strRequestData = Core.CreateLinkStringUrlencode(sPara, code);
& & & & & & return GATEWAY_NEW + strRequestD
然后仿照demo中的default.aspx页面新建一个页面,命名为pay.aspx,此页面要引用ap.js,在pay类中新建方法,如下:
public string GetPayUrl()
& & & & string out_trade_no =string.Format("{0:yyyyMMddHHmmssfff}",DateTime.Now);
& & & & string subject = "装逼订单";
& & & & string total_fee ="0.01";
& & & & string show_url = "";
& & & & string body = "";
& & & & SortedDictionary&string, string& sParaTemp = new SortedDictionary&string, string&();
& & & & sParaTemp.Add("partner", Config.partner);
& & & & sParaTemp.Add("seller_id", Config.seller_id);
& & & & sParaTemp.Add("_input_charset", Config.input_charset.ToLower());
& & & & sParaTemp.Add("service", Config.service);
& & & & sParaTemp.Add("payment_type", Config.payment_type);
& & & & sParaTemp.Add("notify_url", Config.notify_url);
& & & & sParaTemp.Add("return_url", Config.return_url);
& & & & sParaTemp.Add("out_trade_no", out_trade_no);
& & & & sParaTemp.Add("subject", subject);
& & & & sParaTemp.Add("total_fee", total_fee);
& & & & sParaTemp.Add("show_url", show_url);
& & & & sParaTemp.Add("app_pay","Y");//启用此参数可唤起钱包APP支付。
& & & & sParaTemp.Add("body", body);
& & & & return Submit.BuildRequestParaToString(sParaTemp, Encoding.UTF8);
注意哦,用的时候要把对应的参数改成自己的,不要傻到拿别人参数自己用,还不知道哪里错了。
再然后,在页面中,就可以调用了。
& &&script&
& & & & & & var pay = function () {
& & & & & & & & _AP.pay("&%=GetPayUrl()%&");
& & & & &/script&
& & & & &button type="button" onclick="pay()"&支付&/button&
现在再点击支付按钮,跳转的页面就好看多啦。
484好看多了。这个页面的潜台词就是:&小兔子乖乖,快到碗里来&。
赶紧试试在浏览器打开的效果吧:
( ⊙o⊙ )哇,从微信里,直接跳到了支付宝app支付,有木有很屌的样子。知道大家喜欢高清无码的,所以,我故意打了马赛克。哈哈哈,快,别说话,吻我~。
支付完成后,需要咱们手动关闭浏览器,然后会自动返回到微信里咱们发起支付的页面。不过,貌似有点不对,微信里显示的还是那个&快到碗里来的提示&,这个体验就不有点不好了。真是要死啦。&&
终极招式:随心所欲
回顾整个流程,接入插件前与接入后的代码结构区别是,多了两个文件,一个ap.js,一个是pay.htm,既然文件都在咱们这,那还不是想怎么改,怎么改呢。
从调用的方式上,可以看出,js里有个方法pay(url),此方法接收一个参数。然后咱们打开ap.js文件看看。
妈呀,就是这么任性,幸亏咱穿了淘宝5块10片包邮的尿不湿,这又给吓尿了。一行行乱码,一片片尿不湿呀。
其实静下心来仔细看,还是看得懂滴。其他的代码无法就是一个加解密的方法,咱就顺藤摸瓜吧 &。
其实pay方法只是将传过来的参数加密后,跳转到pay.htm后,然后判断是否是在微信的浏览器环境,如果不是的话,就解密,跳转到真实的支付页面。那咱们只需要修改下pay方法就能实现咱们的目的了。
首先呢,在pay方法中添加一个参数,可以为orderid,然后同加密后的url一起跳转到pay.htm,再然后,在pay.htm页面中获取到orderid,写个定时器,每隔几秒中去服务器查询订单的支付状态,如果支付成功了,就跳转到支付成功的页面。用户再返回微信的时候看到的就不会是&快到碗里来&的提示了。
是不是很屌,你知道怎么整了吗?不知道是吧,不知道我也没办法,因为我没准备贴出源码。
哈哈,我就是我,不一样的烟火。
╮(╯▽╰)╭,先别着急关页面呀,看到下面的二维码了吧,关注不关注你看心情,反正我也不准备求你。
觉得本文可以吐槽的话,有本事就发到朋友圈,让全世界的朋友都来吐槽我吧。
阅读(...) 评论()3578人阅读
/*********************************/
文章转自:/jiqing9006/p/5584268.html
/*********************************/
微信对支付宝的链接屏蔽了,
https://mapi./gateway.do?_input_charset=utf-8&notify_url=http%3A%2F%%2Findex.php%3Fg%3DPay%26m%3DAlipay%26a%3Dnotify_url&out_trade_no=&partner=6705&payment_type=1&return_url=http%3A%2F%%2Findex.php%3Fg%3DPay%26m%3DAlipay%26a%3Dreturn_url&seller_id=6705&service=alipay.wap.create.direct.pay.by.user&show_url=%E5%8A%A9%E5%BA%97%E5%AE%9D%E7%9A%84%E5%95%86%E5%93%81%E8%AE%A2%E5%8D%95&subject=%E5%8A%A9%E5%BA%97%E5%AE%9D%E7%9A%84%E5%95%86%E5%93%81%E8%AE%A2%E5%8D%95&total_fee=0.01&sign=4d9d7f1c4ab82f4a80edd38b5e9c8d74&sign_type=MD5
这种地址,直接无法访问。
1.通过iframe避开屏蔽。
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit-&buildRequestForm($parameter,&get&, &确认&);
echo $html_
我们来看看buildRequestForm方法中的内容,
$para_temp 请求参数数组
$method 提交方式。两个值可选:post、get
$button_name 确认按钮显示文字
提交表单HTML文本
function buildRequestForm($para_temp, $method, $button_name) {
$para = $this-&buildRequestPara($para_temp);
$sHtml = &&form id='alipaysubmit' name='alipaysubmit' action='&.$this-&alipay_gateway_new.&_input_charset=&.trim(strtolower($this-&alipay_config['input_charset'])).&' method='&.$method.&'&&;
while (list ($key, $val) = each ($para)) {
$sHtml.= &&input type='hidden' name='&.$key.&' value='&.$val.&'/&&;
$sHtml = $sHtml.&&input type='submit'
value='&.$button_name.&' style='display:'&&/form&&;
$sHtml = $sHtml.&&script&document.forms['alipaysubmit'].submit();&/script&&;
return $sH
它会自动生成一个表单提交,提交到/gateway.do这个页面去处理,这个时候,微信就屏蔽掉了。
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit-&getHtml($parameter);
$content = '&iframe src=&'.$html_text.'& name=&iframepage& id=&iframepage&
scrolling=&no& frameborder=&0&&&/iframe&';
$this-&assign('content',$content);
$this-&display();
这里的核心就是getHtml中的内容,这个方法是新加的,它可以拼接出支付宝调用支付的地址及所需要的各种参数。
function getHtml($para_temp) {
$para = $this-&buildRequestPara($para_temp);
while (list ($key, $val) = each ($para)) {
$init.=&&&.$key.&=&.urlencode($val);
$init=$this-&alipay_gateway_new.&_input_charset=&.trim(strtolower($this-&alipay_config['input_charset'])).$
这里的urlencode很重要,可以对内容进行一些url处理。还有就是buildRequestPara方法,会自动生成签名,签名很重要,不然无法完成支付宝支付流程。
$para_temp 请求前的参数数组
要请求的参数数组
function buildRequestPara($para_temp) {
$para_filter = paraFilter($para_temp);
$para_sort = argSort($para_filter);
$mysign = $this-&buildRequestMysign($para_sort);
$para_sort['sign'] = $
$para_sort['sign_type'] = strtoupper(trim($this-&alipay_config['sign_type']));
return $para_
生成签名para_temp中的参数一个都不能少,
$parameter = array(
=& $alipay_config['service'],
=& $alipay_config['partner'],
&seller_id&
=& $alipay_config['seller_id'],
&payment_type&
=& $alipay_config['payment_type'],
&notify_url&
=& C('site_url').U('Pay/Alipay/notify_url'),
&return_url&
=& C('site_url').U('Pay/Alipay/return_url'),
&_input_charset&
=& trim(strtolower($alipay_config['input_charset'])),
&out_trade_no&
=& $out_trade_no,
=& $subject,
&total_fee& =& $total_fee,
&show_url&
=& $show_url,
为了让页面好看一些,我没有直接echo输出,而是写了一个页面,pay.html
http-equiv=&Content-Type& content=&text/ charset=UTF-8&&
http-equiv=&Cache-Control& content=&no-Cache& /&
http-equiv=&Cache-Control& content=&max-age=0& /&
name=&viewport& content=&width=device-width,inital-scale=1.0,maximum-scale=1.0,user-scalable=&&
name=&apple-mobile-web-app-capable& content=&yes&&
name=&apple-mobile-web-app-status-bar-style& content=&black&&
name=&format-detection& content=&telephone=no&&
href=&/Public/css/bootstrap.min.css& rel=&stylesheet& type=&text/css&&
src=&/Public/js/jquery-1.10.2.min.js& type=&text/javascript&&&
&支付宝支付&
.scroll-wrapper{
bottom: 0;
-webkit-overflow-scrolling:
overflow-y:
.scroll-wrapper
height: 100%;
width: 100%;
class=&scroll-wrapper&&
{sh:$content}
有这个页面,能够更好的处理iframe的自适应效果。
调试过程中遇到一些问题,
1.iframe显示效果,不能很好的自适应,通过上面的css很好的解决了。
2.如何使用iframe。一开始不太懂,其实iframe中的src就是一个连接,把微信的屏蔽连接放上去就可以了。
3.总是报签名错误,在getHtml的参数中加上urlencode处理好了url地址。
4.支付成功后,页面跳转不出iframe,有待优化!基本ok了。
通过js实现跳出iframe。通常支付成功后会转到订单列表页,可以根据你的实际情况,到相应的页面添加下面的js代码。很神奇。亲测可用。
if(top.location!=self.location)
top.location=self.
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22486次
排名:千里之外
原创:18篇
(1)(1)(1)(4)(1)(1)(1)(1)(1)(1)(4)(1)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 支付宝微信收款码合并 的文章

 

随机推荐