微信H5支付

本篇文件来聊聊微信服务商模式以及商户模式下微信H5支付

先说一个事情。8月1号开始微信公众平台支付的开发配置页面迁移至商户平台 详细说明参考这个或者看下面的截图

官方文档
普通商户版-微信H5支付
服务商版-微信H5支付

1、申请开通微信H5支付

服务商模式下点击申请开通会立即开通,邀请子商户时需要填写子商户的信息。服务商模式下与商户模式下主要的区别在于商户模式下不用填写特约商户信息、只需要填写商户H5支付相关的信息 如下图

注意
填写的H5支付域名必须是对应网站备案的域名且备案主体还得与商户的主体信息一致。否则申请的时候不给予通过。审核反馈的周期不是很长一般是隔天就可以给出反馈。

2、接口流程图以及常见错误

简单点概括
1、用户使用非微信客户端浏览器下单
2、调用微信支付接口下单得到H5支付URL的跳转链接
3、跳转到微信唤起微信支付
4、支付成功异步通过
5、处理支付结果

详细流程介绍

1、用户在商户侧完成下单,使用微信支付进行支付
2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB
3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页
4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)
5、如支付成功,商户后台会接收到微信侧的异步通知
6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)
7、商户在展示页面,引导用户主动发起支付结果的查询
8,9、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态
10、展示最终的订单支付结果给用户

常见错误:

1、网络环境未能通过安全验证,请稍后再试(IP改变导致的)
2、商家参数格式有误,请联系商家解决(H5支付的referer为空导致)
3、商家存在未配置的参数,请联系商家解决(H5支付的域名问题)
4、支付请求已失效,请重新发起支付(有效期为5分钟)
5、请在微信外打开订单,进行支付(H5支付不能直接在微信客户端内调起)

3、统一下单获取支付的URL

你做过扫码支付、公众号支付以及App支付吗?如果做过那H5支付就相当简单了,与前面的提到的几种支付方式统一下单的URL是一样的只是个别请求参数不同而已(trade_type为MWEB、scene_info必填)。如果没有做过也没有关系下面就是详细的案例了。

/**
     * 微信H5 支付
     */
    public void wapPay(){
        String ip = IpKit.getRealIp(getRequest());
        if (StrKit.isBlank(ip)) {
            ip = "127.0.0.1";
        }

        H5ScencInfo sceneInfo = new H5ScencInfo();

        H5 h5_info = new H5();
        h5_info.setType("Wap");
        h5_info.setWap_url("https://pay.qq.com");
        h5_info.setWap_name("腾讯充值");
        sceneInfo.setH5_info(h5_info);

        Map<String, String> params = WxPayApiConfigKit.getWxPayApiConfig()
                .setAttach("IJPay H5支付测试  -By Javen")
                .setBody("IJPay H5支付测试  -By Javen")
                .setSpbillCreateIp(ip)
                .setTotalFee("520")
                .setTradeType(TradeType.MWEB)
                .setNotifyUrl(notify_url)
                .setOutTradeNo(String.valueOf(System.currentTimeMillis()))
                .setSceneInfo(h5_info.toString())
                .build();

        String xmlResult = WxPayApi.pushOrder(false,params);
log.info(xmlResult);
        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);

        String return_code = result.get("return_code");
        String return_msg = result.get("return_msg");
        if (!PaymentKit.codeIsOK(return_code)) {
            ajax.addError(return_msg);
            renderJson(ajax);
            return;
        }
        String result_code = result.get("result_code");
        if (!PaymentKit.codeIsOK(result_code)) {
            ajax.addError(return_msg);
            renderJson(ajax);
            return;
        }
        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回

        String prepay_id = result.get("prepay_id");
        String mweb_url = result.get("mweb_url");

        renderText("prepay_id:"+prepay_id+" mweb_url:"+mweb_url);
    }

在手机浏览器中访问mweb_url即可唤起微信进行支付

更正 20170830
1、上面复制mweb_url到手机浏览器访问会出现网络环境未能通过安全验证,请稍后再试 为什么呢? 因为发起支付与唤起支付的IP不一致
2、微信H5支付必须在设置的域名(商户平台–”产品中心”–”开发配置”)网页中发起支付不然会出现商家参数格式有误,请联系商家解决 为什么呢? 因为微信H5支付需要验证支付的referer

更正后的代码如下:

/**
     * 微信H5 支付
     * 注意:必须再web页面中发起支付且域名已添加到开发配置中
     */
    public void wapPay(){
        String ip = IpKit.getRealIp(getRequest());
        if (StrKit.isBlank(ip)) {
            ip = "127.0.0.1";
        }

        H5ScencInfo sceneInfo = new H5ScencInfo();

        H5 h5_info = new H5();
        h5_info.setType("Wap");
        //此域名必须在商户平台--"产品中心"--"开发配置"中添加
        h5_info.setWap_url("https://pay.qq.com");
        h5_info.setWap_name("腾讯充值");
        sceneInfo.setH5_info(h5_info);

        Map<String, String> params = WxPayApiConfigKit.getWxPayApiConfig()
                .setAttach("IJPay H5支付测试  -By Javen")
                .setBody("IJPay H5支付测试  -By Javen")
                .setSpbillCreateIp(ip)
                .setTotalFee("520")
                .setTradeType(TradeType.MWEB)
                .setNotifyUrl(notify_url)
                .setOutTradeNo(String.valueOf(System.currentTimeMillis()))
                .setSceneInfo(h5_info.toString())
                .build();

        String xmlResult = WxPayApi.pushOrder(false,params);
log.info(xmlResult);
        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);

        String return_code = result.get("return_code");
        String return_msg = result.get("return_msg");
        if (!PaymentKit.codeIsOK(return_code)) {
            ajax.addError(return_msg);
            renderJson(ajax);
            return;
        }
        String result_code = result.get("result_code");
        if (!PaymentKit.codeIsOK(result_code)) {
            ajax.addError(return_msg);
            renderJson(ajax);
            return;
        }
        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回

        String prepay_id = result.get("prepay_id");
        String mweb_url = result.get("mweb_url");

        System.out.println("prepay_id:"+prepay_id+" mweb_url:"+mweb_url);
        redirect(mweb_url);
    }

如果你下载的是Jfinal版本的Demo 访问的URL为
http://域名:端口号/toWxH5Pay

具体实现可以参考开源项目 IJPay 让支付触手可及

推荐阅读
极速开发微信公众号
基于 CentOS 搭建 FTP 文件服务
基于 CentOS Mysql 5.7.19 安装与主从同步配置详解
Redis4.0.1安装以及主从复制详解
10分钟搭建属于自己的ngork服务器,实现内网穿透

时间: 2024-10-30 06:00:22

微信H5支付的相关文章

微信H5支付,Android第一次支付成功

问题描述 微信H5支付,Android第一次支付成功 微信H5支付,新打开微信,第一次无法正常支付,但是重新通过菜单进入时,可以正常发起支付,iOS上一切正常 解决方案 Android 微信支付Android微信支付 解决方案二: http://www.bkjia.com/Androidjc/998202.html

微信H5支付.NET版本备忘

微信H5支付.NET版本备忘

微信支付开发(7) H5支付

关键字:微信支付 微信支付v3 H5支付 wap支付 prepay_id 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv3_h5.html    本文介绍微信支付下的H5支付实现流程.     一.介绍 H5支付是基于公众号基础开发的一种非微信内浏览器支付方式(需要单独申请支付权限),可以满足在微信外的手机H5页面进行微信支付的需求.. 测试地址  http://wxpay.weixin.qq.com/pub_v2/pay/wap.v2.p

微信H5调起微信支付,报错支付验证签名失败

问题描述 微信H5调起微信支付,报错支付验证签名失败 5C 获取prepareId 时候正常但是通过WeixinJSBridge.invoke('getBrandWCPayRequest' )调取的时候就会报 <支付验证签名失败>签名是通过微信提供的工具验证过的一致 公众平台的授权网址也写的没问题商户key也是没问题(获取prepareId没问题就应该不是这的问题吧) 求大家帮忙 解决方案 微信支付不是需要进行ASC值进行排序么,排查下你写的顺序是否正确

C#开发微信门户及应用(44)--微信H5页面开发的经验总结

在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页面,给我们提供了很大的便利,本文是在自己做的一些H5微信应用页面上做了一些功能总结,希望能够给大家提供一定的帮助. 1.微信网页开发 1) JSSDK 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语

Steam微信不能支付了吗?Steam微信怎么不能支付了

  Steam微信不能支付了原因介绍 Steam平台今天正式启动了为期一周的"黑五"大促,包括<三国志13>.<文明6>在内的不少游戏大作都给出了可观的折扣. 与此同时,Steam支付宝付款方式也于今日正式回归,至此,国区玩家在购买Steam游戏时共可以选择支付宝.微信支付和财付通支付三种方式. 不过现在有网友发现,微信和财付通支付方式又不能用了,无论是选择微信还是财付通,都会提示"此支付方式暂时不可用" 而支付宝.银联在内的其他方式依旧正常

微信支付错误-微信第三方支付问题提问

问题描述 微信第三方支付问题提问 安卓微信支付获取prepayID时报:商户号和公众号没有联系.我用的是自己的商户号和appid求各位大神指点 解决方案 问下微信客服,或者把你的账号提供给他们看下. 解决方案二: 应该是appid填错了 解决方案三: 你申请key和seccet了吗?

腾讯将在两个月内给微信增加支付服务,让卖家可以直接受理来自买家个人账户的网上支付

11月22日消息:据华尔街日报(博客,微博)报道,腾讯公司计划将一项支付业务与微信业务整合起来,腾讯将通过微信变为商业上的创收大户.腾讯称,此举是互联网公司从社交网络服务中盈利的新方法. 腾讯第三方支付平台财付通的经理赖志明最近在一个新闻发布会上说,腾讯将在两个月内给微信增加支付服务.让卖家可以直接受理来自买家个人账户的网上支付.据介绍,用户将能够在商店里扫描产品的条形码以购买产品. 微信它允许用户通过电话发送语音短信.照片和其他媒体内容,却不向其额外收取微信服务费.微信尤其受到用户欢迎的是其语

微信wap页面支付,跳转到微信app支付

问题描述 微信wap页面支付,跳转到微信app支付 10C 大神们,有人知道微信支付的wap支付吗,不是jsapi那种的,不需要openid支付,跳转到微信app支付.仿照饿了么做的微信网页外支付,跳转微信支付.使用deeplink=weixin://wap/pay?appid%3Dwx2a416286e96100ed%26timestamp%3D1440149301%26noncestr%3Dzhl8sc54mixgj65cntrv7kzogesoehgf%26package%3DWAP%26