webapp在微信中支付问题

用户在微信打开浏览器访问网站,进行支付宝或者微信H5支付,页面提示跳转到浏览器操作。
此后,跳转到浏览器后用户就是非登录状态,还得重新登录支付,这该怎么解决?

使用的iframe,腾讯并没有屏蔽数据传输层。只是屏蔽了当前URL。

不是应该接支付宝或者微信支付的接口,直接打开app支付吗?为什么要跳到浏览器?你这个想法有问题呀

用户注册的时候和微信APPID绑定下,跳到H5的时候,获取下appid参数自动登录

都知道支付宝支付在不同环境下分好多种,本文介绍的是<手机网页即时到账接口-手机网页即时到账接口>如何接入。至于如何开通支付宝,审核等步骤,请查阅其他文档。本文使用的是其中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有错:

第四行修改为

2.引入路径问题:

如果是使用的JAVA版接入微信,且使用JSP方式生成自动submit的表单内容。那么请在JSP存放的路径拷贝进去pay.html、ap.js两个文件。

3.如何引入ap.js和参数加引号:

如何引入ap.js

[java] view plain copy
/**
* 建立请求,以表单HTML形式构造(默认)
* @paramALIPAY_GATEWAY_NEW 支付宝网关地址
* @param sParaTemp 请求参数数组
* @param strMethod 提交方式。两个值可选:post、get
* @param strButtonName 确认按钮显示文字
* @return 提交表单HTML文本
*/

public static String buildRequest(String ALIPAY_GATEWAY_NEW, Map sParaTemp, String strMethod, String strButtonName) {

//待请求参数数组

Map sPara = buildRequestPara(sParaTemp);

List keys = new ArrayList(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:none;\" onclick=\"sendTo()\"></form>");  

    String prestr = createLinkStr(sPara);  
    String str = ALIPAY_GATEWAY_NEW + prestr;  
    sbHtml.append("<script>function sendTo(){"  
            + "_AP.pay(\""+ str +"\");"  
            + "};sendTo();</script>");  

/* sbHtml.append("");
sbHtml.append("document.forms[&#39;alipaysubmit&#39;].submit();");*/

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);  
        try {  
            value = URLEncoder.encode(value, AlipayConfig.input_charset);  
        } catch (UnsupportedEncodingException e) {  
        }  
        if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符  
            prestr = prestr + key + "=" + value;  
        } else {  
            prestr = prestr + key + "=" + value + "&";  
        }  
    }  

    return prestr;  
}  

代码片段 + "_AP.pay(\""+ str +"\");" 中 str 变量两侧要有 \" ,不光是str变量要是字符串,还要用引号包起来。
4.URLEncoder
createLinkStr方法是拼装字符串的作用,拼装的同时,要为每个value都进行URLEncoder.encode

用户跳转前把appId及登录标识 传进页面的变量,跳转后根据appid判定是否登录

可以去找下集成好的支付平台

跳转前把appId及登录标识 传进页面的变量,跳转后根据appid判定是否登录

微信服务器不会向客户端发送cookie,所以session会失效,你的登录就会出问题,所以session和微信支付不能直接用session来做,要处理一下

我在微信里面的H5中实现支付宝支付的方式如下:

1、在H5界面提供了支付宝支付的方式
2、当使用支付宝支付,点击提交的时候,使用支付宝提供的pay.htm和ap.js进行跳转(get方式)
3、get方式是自己拼接的url

_AP.pay(ApiConf.server +
                                "OnlinePayment/onlinePay?token=" + ApiConf.token +
                                "&payType=" + payType +
                                "&totalAmount=" + totalAmount +
                                "&body=" + body);

4、在后台通过token校验以及是哪个用户进行支付
5、调用支付宝SDK生成支付表单
6、通过浏览器或者支付宝App支付
7、回调进入支付成功的界面(失去连接),需要重新登录