• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP接入微信H5支付的方法示例

    开发前配置

    进行代码接入前,需在微信后台填写授权回调域名,此域名必须经过ICP备案

    开发主要流程

    正式开发

    调起微信支付,只说明必要参数
    请求微信统一下单接口,接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder

    接口请求参数

    以上便是H5支付下单所需要的参数

    签名生成

    代码:

      /**
       * 组建签名
       * @param array $params 请求参数
       * @param string $key 秘钥
       */
      public function genSign($params, $key)
      {
        foreach ($params as $k=>$v) {
          if (!$v) {
            unset($params[$k]);
          }
        }
        ksort($params);
        $paramStr = '';
        foreach ($params as $k => $v) {
          $paramStr = $paramStr . $k . '=' . $v . '';
        }
        $paramStr = $paramStr . 'key='.$key;
        $sign = strtoupper(md5($paramStr));
        return $sign;
      }
    

    发起请求

    将参数转为XML数据,即可发起请求

    将数组转为XML代码:

      /**
       * 将数组转为XML
       * @param array $params 支付请求参数
       */
      public function array_to_xml($params)
      {
        if(!is_array($params)|| count($params) = 0) {
          return false;
        }
        $xml = "xml>";
        foreach ($params as $key=>$val) {
          if (is_numeric($val)) {
            $xml.="".$key.">".$val."/".$key.">";
          } else {
            $xml.="".$key.">![CDATA[".$val."]]>/".$key.">";
          }
        }
        $xml.="/xml>";
        return $xml;
      }
    

    请求代码:

        $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_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        $return = curl_exec($ch);
        curl_close($ch);
        return $return;
    

    微信返回的是XML数据:

    xml>return_code>![CDATA[SUCCESS]]>/return_code>
    return_msg>![CDATA[OK]]>/return_msg>
    appid>![CDATA[wxdded766660f9b840]]>/appid>
    mch_id>![CDATA[1516216351]]>/mch_id>
    device_info>![CDATA[100]]>/device_info>
    nonce_str>![CDATA[2DUN2i2pGnlC6vDi]]>/nonce_str>
    sign>![CDATA[95CEA831D598299097A32D8FEEC6BDEF]]>/sign>
    result_code>![CDATA[SUCCESS]]>/result_code>
    prepay_id>![CDATA[wx22194530678545eb3713f2f10724143329]]>/prepay_id>
    trade_type>![CDATA[MWEB]]>/trade_type>
    mweb_url>![CDATA[https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx22194530678545eb3713f2f10724143329package=87106983]]>/mweb_url>

    return_code为SUCCESS代表支付请求成功;

    mweb_url则为支付跳转页,此时客户端通过mweb_url已经可以调起微信支付

    中间页处理

    在得到微信返回的mweb_url参数后,可在服务端进一步获得deepLink

    代码:

      /**
       * 获取微信支付中间页deepLink参数
       * @param string $url 微信返回的mweb_url
       * @param string $ip 用户端IP
       */
      public function getDeeplink(string $url, string $ip)
      {
        $headers = array("X-FORWARDED-FOR:$ip", "CLIENT-IP:$ip");
        ob_start();
        $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_HTTPHEADER , $headers );
        curl_setopt ($ch, CURLOPT_REFERER, "pay.o9di.cn");
        curl_setopt( $ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0.1; OPPO R11s Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36');
        curl_exec($ch);
        curl_close ($ch);
        $out = ob_get_contents();
        ob_clean();
        $a = preg_match('/weixin:\/\/wap.*/',$out, $str);
        if ($a) {
          return substr($str[0], 0, strlen($str[0])-1);
        } else {
          return '';
        }
      }
    

    weixin://wap/pay?prepayid%3Dwx22201221074146ac747121890095299503package=2656135616noncestr=1542888966sign=e31dbc2d1231708ff8a982b15a6c7646即为得到的deepLink值,客户端也可以通过此值直接调起支付

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • PHP微信H5支付开发实例
    上一篇:PHP判断当前使用的是什么浏览器(推荐)
    下一篇:PHP常见的序列化与反序列化操作实例分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP接入微信H5支付的方法示例 PHP,接,入微,信,支付,的,