一、首先先确定H5支付权限已经申请!

二、开发流程

1、用户在商户侧完成下单,使用微信支付进行支付

2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB

3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页

4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)

5、如支付成功,商户后台会接收到微信侧的异步通知

6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)

7、商户在展示页面,引导用户主动发起支付结果的查询

8,9、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态

10、展示最终的订单支付结果给用户

三、开发过程

1、配置相关参数

1
2
3
4
5
6
7
8
9
class WechatPayConf
{
     
    const APPID = '';//APPID
    const MCH_ID = '';//商户号
    const KEY = '';//商户key
    const NOTIFY_URL = '';//回调地址
}

 

2、统一下单

接口链接

URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

请求参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>支付测试</attach>
<body>H5支付测试</body>
<mch_id>10000100</mch_id>
<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
<notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
<out_trade_no>1415659990</out_trade_no>
<spbill_create_ip>14.23.150.211</spbill_create_ip>
<total_fee>1</total_fee>
<trade_type>MWEB</trade_type>
<scene_info>{"h5_info": {"type":"IOS","app_name""王者荣耀","package_name""com.tencent.tmgp.sgame"}}</scene_info>
<sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>

  

PHP代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
 * 统一支付接口类
 */
class UnifiedOrder_pub extends Wxpay_client_pub
{  
    function __construct()
    {
        //设置接口链接
        $this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
        //设置curl超时时间
        $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
    }
     
    /**
     * 生成接口参数xml
     */
    function createXml()
    {
        try
        {
            //检测必填参数
            if($this->parameters["out_trade_no"] == null)
            {
                throw new SDKRuntimeException("缺少统一支付接口必填参数out_trade_no!"."<br>");
            }elseif($this->parameters["body"] == null){
                throw new SDKRuntimeException("缺少统一支付接口必填参数body!"."<br>");
            }elseif ($this->parameters["total_fee"] == null ) {
                throw new SDKRuntimeException("缺少统一支付接口必填参数total_fee!"."<br>");
            }elseif ($this->parameters["notify_url"] == null) {
                throw new SDKRuntimeException("缺少统一支付接口必填参数notify_url!"."<br>");
            }elseif ($this->parameters["trade_type"] == null) {
                throw new SDKRuntimeException("缺少统一支付接口必填参数trade_type!"."<br>");
            }elseif ($this->parameters["trade_type"] == "JSAPI" &&
                $this->parameters["openid"] == NULL){
                throw new SDKRuntimeException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"."<br>");
            }
            $this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID
            $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号
            $this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip      
            $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
            $this->parameters["sign"] = $this->getSign($this->parameters);//签名
            return  $this->arrayToXml($this->parameters);
        }catch (SDKRuntimeException $e)
        {
            die($e->errorMessage());
        }
    }
     
    /**
     * 获取prepay_id
     */
    function getPrepayId()
    {
        $this->postXml();
        $this->result = $this->xmlToArray($this->response);
        $prepay_id $this->result["prepay_id"];
        return $prepay_id;
         
    }
     
}

 

如果调用正常,就会得到一个支付url

其它常见错误

序号 问题 错误描述 解决方法
1 268498465 网络环境未能通过安全验证,请稍后再试 1. 商户侧统一下单传的终端IP(spbill_create_ip)与用户实际调起支付时微信侧检测到的终端IP不一致导致的,这个问题一般是商户在统一下单时没有传递正确的终端IP到spbill_create_ip导致,详细可参见客户端ip获取指引

2. 统一下单与调起支付时的网络有变动,如统一下单时是WIFI网络,下单成功后切换成4G网络再调起支付,这样可能会引发我们的正常拦截,请保持网络环境一致的情况下重新发起支付流程

2 268443815 商家参数格式有误,请联系商家解决

1. 当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空

2. 如果是APP里调起H5支付,需要在webview中手动设置referer,如(
Map<string,string> extraHeaders = new HashMap<string,string>();
extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如 http://www.baidu.com ))

3 268443816 商家存在未配置的参数,请联系商家解决 1,当前调起H5支付的域名(微信侧从referer中获取)与申请H5支付时提交的授权域名不一致,如需添加或修改授权域名,请登陆商户号对应的商户平台--"产品中心"--"开发配置"自行配置

2,如果设置了回跳地址redirect_url,请确认设置的回跳地址的域名与申请H5支付时提交的授权域名是否一致

4 268498468 支付请求已失效,请重新发起支付 统一下单返回的MWEB_URL生成后,有效期为5分钟,如超时请重新生成MWEB_URL后再发起支付
6 请在微信外打开订单,进行支付 H5支付不能直接在微信客户端内调起,请在外部浏览器调起

标签: 微信h5支付demo 微信H5支付demo 非微信浏览器支付 微信wap支付

黄聪:微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付相关推荐

  1. php 公众号内h5支付宝支付宝支付宝支付宝支付,微信浏览器中支付宝wap支付和微信JSAPI公众号支付...

    手机浏览器只有支付宝wap支付,微信浏览器中出现支付宝wap支付和微信JSAPI公众号支付,其中支付宝wap在线支付没有在新窗口打开(兼容大部分手机),Thinkphp3.2公众号支付 下载资源 下载 ...

  2. 微信html5 支付接口,黄聪:详解申请微信h5支付方法,开通微信h5网页支付接口(转)...

    现在大街小巷的商家都在使用微信支付, 但是一些商家使用的是个人微信收款, 这个虽然很便利, 但是如果你想要数据统计汇总, 让客户在网络上在线付款, 就需要用到微信的h5支付. 微信h5支付 今天子恒老 ...

  3. h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...

    由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付.这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷. 但是真正做的时候问题来了,当你支付成功之后或 ...

  4. CocosCreator H5 微信内置浏览器调起微信支付

    CocosCreator H5 微信内置浏览器调起微信支付 先来看看效果图 微信公众平台相关文档传送门https://mp.weixin.qq.com/wiki?t=resource/res_main ...

  5. 微信小程序web-view与H5之间交互(含支付)

    第一章 了解web-view与H5的交互(含支付) 文章目录 第一章 了解web-view与H5的交互(含支付) 前言 一.web-view是什么? 二.使用步骤 三.业务场景 1.小程序带参数跳转链 ...

  6. 微信里嵌入html5页面,微信小程序web-view嵌套H5实现微信支付功能解决方案

    一. 产品现状 首先,在接入微信支付功能以前,我们的产品情况是这样的: 1 有公众号和app的h5站点及相关配套功能 2 小程序已经有一些基础功能,这些功能没有使用web-view 3 小程序之前的服 ...

  7. html微信支付跳转源码,h5外部浏览器跳转微信支付链接api接口免费代码

    如何让h5网页外浏览器跳转微信支付链接呢,这里分析了部分微信接口,可以用原生的公众号支付接口来搭建平台,代码如下 跳转中 //演示地址:http://vip.kakuapi.com/wxpay.php ...

  8. 微信支付宝收款码转账H5免签高并发出码带备注可回调成功率99.9%支持重复支付

    微信支付宝收款码转账H5免签高并发出码带备注可回调成功率99.9%支持重复支付多种轮询规则提高存活率         本收款系统,可使用支付宝个人码 企业支付宝收款码 微信个人码收款,可以完成即时到账 ...

  9. html 获取微信支付接口,h5外部浏览器跳转微信支付链接api接口免费代码

    如何让h5网页外浏览器跳转微信支付链接呢,这里分析了部分微信接口,可以用原生的公众号支付接口来搭建平台,代码如下 跳转中 //演示地址:http://vip.kakuapi.com/wxpay.php ...

  10. 微信支付(关于h5支付与JSAPI支付)

    微信支付(关于h5支付与JSAPI支付) 需求:如果在微信自带浏览器可直接调用支付(JSAPI支付),如果是在非微信浏览器(qq浏览器,safari-)拉取微信客户端再支付. 设置order.vue页 ...

最新文章

  1. 技术网站 --websystique.com
  2. Spring Boot 主类及目录结构介绍
  3. boost::function模块function_typeof的测试程序
  4. MFC原理 消息传递
  5. .NET斗鱼直播弹幕客户端(上)
  6. 其实,大部分人都不需要你去培养
  7. [安卓基础] 009.组件Activity详解
  8. mysql 数据库连接 w3school_PHP 连接 MySQL
  9. java 给字典类型赋值_java使用forEach填充字典值
  10. 前端把信息放在弹框里显示出来_jsp + js + 前端弹出框
  11. Delphi无法修改Clientdataset的字段的解决方法
  12. java. 饼图的下面标签显示_饼图的数据标签太乱怎么办?
  13. java character_[转载]Java中Character类的使用方法
  14. Vue实现登录记住密码
  15. 微信小程序选项卡切换
  16. 计算机9针485接口,串口RS232__485的9针引脚定义
  17. matlab生成gif动图
  18. [SHOI 2008]小约翰的游戏
  19. Jmeter 之 Beanshell 用法
  20. 期货交易原理(期货交易原理与实务)

热门文章

  1. 2019年美赛D题翻译与思路详解
  2. keil如何下载STM32芯片F1/F4固件库
  3. 分享我的Latex模板(数学建模/论文通用,附下载链接)
  4. PPT转pdf保存动画效果
  5. Could not find artfact com.oracle:ojdbc7:jar:12.1.0.2.0 in nexus-aliyun
  6. 【第24章】工控安全需求分析与安全保护工程(软考:信息安全工程师)-- 学习笔记
  7. iOS软件开发揭密:iPhoneiPad企业应用和游戏开发(china-pub首发)
  8. 走进小作坊(十五)----疯狂的站长
  9. Linux内核memcpy的不同实现
  10. 小米路由器3 变砖 ttl 救砖,刷入padavan