近来公司项目要求用到微信H5开发,因为微信开发文档处处都是坑,我也走了不少弯路,现在就把H5支付的过程记录一下,已备后用!!

首先 先去商户平台申请开通 H5支付!!!!

我们从微信官方下载H5支付demo,(忘记了没有demo,自己写吧,蛋疼!)微信H5支付文档请点击这里(为了方便查看我用了_blank)。

官方是给我们提供了案例的大家可以移步查看--->微信官方体验链接:http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开。

官方提供的流程,大家可以看看是不是你想要的样子,以防止写错 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_3

大概思路:前台传过来参数后台接收比如金额(注意这里的金额,微信传的是分),订单号,客户端ip(获取客户端ip方法,官方给的方法不对,请查看我的另一篇)等。

用到的最重要的接口是统一下单    

      $subject = $data['subject']; //商品描述        
      $total_amount = $data['total_amount']*100; //金额
$additional = $data['additional']; ////附加数据
$order_id = $data['order_id']; ////订单号
$nonce_str=MD5($order_id);//随机字符串
$spbill_create_ip = $data['spbill_create_ip']; //终端ip
     //以上参数接收不必纠结,按照正常接收就行,相信大家都看得懂
//$spbill_create_ip = '118.144.37.98'; //终端ip测试
$trade_type = 'MWEB';//交易类型 具体看API 里面有详细介绍 $notify_url = 'http://xy.xxx.com/medias/public/index.php/home/Wxh5pay/notify_url'; //回调地址
$scene_info ='{"h5_info":{"type":"Wap","wap_url":"http://www.123.com","wap_name":"测试支付"}}'; //场景信息
//对参数按照key=value的格式,并按照参数名ASCII字典序排序生成字符串
$signA = "appid=$appid&body=$subject&mch_id=$mch_id&nonce_str=$nonce_str&notify_url=$notify_url&out_trade_no=$order_id
      &scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_amount&trade_type=$trade_type"; $strSignTmp = $signA."&key=$key"; //拼接字符串 $sign = strtoupper(MD5($strSignTmp)); // MD5 后转换成大写 $post_data = "<xml>
<appid>$appid</appid>
<body>$subject</body>
<mch_id>$mch_id</mch_id>
<nonce_str>$nonce_str</nonce_str>
<notify_url>$notify_url</notify_url>
<out_trade_no>$order_id</out_trade_no>
<scene_info>$scene_info</scene_info>
<spbill_create_ip>$spbill_create_ip</spbill_create_ip>
<total_fee>$total_amount</total_fee>
<trade_type>$trade_type</trade_type>
<sign>$sign</sign>
</xml>";//拼接成XML 格式 $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址
$dataxml = $this->http_post($url,$post_data); //后台POST微信传参地址 同时取得微信返回的参数,http_post方法请看下文
$objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组
if($objectxml['return_code'] == 'SUCCESS') {
if($objectxml['result_code'] == 'SUCCESS'){//如果这两个都为此状态则返回mweb_url,详情看‘统一下单’接口文档
return $objectxml['mweb_url']; //mweb_url是微信返回的支付连接要把这个连接分配到前台
}
if($objectxml['result_code'] == 'FAIL'){
        return $err_code_des = $objectxml['err_code_des'];       }}

微信支付接口签名校验工具:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=20_1

大家可以使用以上工具,检测您的签名是不是正确。

function http_post($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}

以上就是微信H5支付,电脑支付请使用PC扫码支付,原理类似,看文档即可

PHP微信H5支付开发的更多相关文章

  1. 微信H5支付开发(maven仓库版)

    官方文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1 开发之前确认开通了H5支付功能 一.安装微信sdk 二.创建config ...

  2. java进行微信h5支付开发

    最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...

  3. 微信H5支付开发步骤总结

    * 开发步骤: * 1.在微信公众号平台设置授权目录,即jsapi.php所在的目录 * 2.在微信支付平台下载证书,放到cert目录 * 3.在微信支付平台设置API秘钥,同时在WxPay.Conf ...

  4. 微信H5支付开发全过程(除内置微信以外的浏览器)

    前言:网上都是~ 呵呵 自己搞 只要花时间 多问客服总会有的 只说程序不说准备工作 自己ID 或者秘钥都准备好了  写的有点儿乱 可以把所有的方法 放在一个文件中调用 public function ...

  5. Android通过外部浏览器调用微信H5支付,Android+PHP详解

    看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...

  6. 微信支付之微信H5支付(坑,ajax不支持重定向跳转)

    这里讲的是  微信h5支付,    是微信以外的手机浏览器调用微信h5支付  h5支付: H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起 ...

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

    在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页 ...

  8. 微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付.APP微信支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存. 先说注意 ...

  9. C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存.代码在文章结尾处,有需要的 ...

随机推荐

  1. c# winform 视频转字符动画

    以上是大图展示, 原理比较简单,附件下载带了一个分辨率比较小的txt动画.   音乐删除了music.mp3,  如果需要自己下载一首歌曲,然后放在根目录名称“music.mp3”就可以了. 附件点我 ...

  2. Python线程:线程的调度-守护线程

    Python线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.在python中建议使用的是thread. ...

  3. SharePoint客户端js对象模型

    'use strict'; var context = SP.ClientContext.get_current(); var user = context.get_web().get_current ...

  4. 激活IDEA

    1 先跳过提示 2 点击regist 3 输入注册码  : 我的注册码在这里找的 - >>  http://hw1287789687.iteye.com/blog/2153894

  5. C# Split 字符文本中的字符太多

    问题: ] { '<h1>', '</h1>' }); 原因: Split()里面是用char类型不是string字符串类型,所以只能用一个字符,必须先把多个字符替换成一个字符 ...

  6. 原生ajax jq跨域

    原生js封装ajax //创建XmlhttpRequest对象 function createXHR(){     var xhr=null;     if(XMLHttpRequest){      ...

  7. AdaBoostRegressor

    class sklearn.ensemble.AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, lo ...

  8. bootstrap-paginator分页插件的两种使用方式

    分页有两种方式: 1. 前台分页:ajax一次请求获取全部数据,适合少量数据(万条数据以下): $.ajax({ type: "GET", url: "",// ...

  9. Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)

    A. Vladik and Courtesy time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...

  10. [hdu3943]K-th Nya Number

    挺正常的一道模板题. f[i][j][k]表示i位的数,有j个4,k个7的方案数. 具体实现的话...我写了发二分答案..需要注意的是二分时应该是mid=L+(R-L)/2..不然分分钟爆longlo ...