<i date-time='q7mi7v4'></i>
        <kbd id='vwl0rf7'></kbd>

          <dfn id='8uix972'><dir draggable='siqk3v'></dir></dfn>

                      文章熱詞:PHP,微信H5支付

                      日期:2019-04-16 09:37 by admin 1670 1 收藏
                      我要分享

                      摘要:用戶下單時選擇微信支付,商戶進行業務邏輯處理并調用微信統一下單接口,微信H5交易類型爲:trade_type=MWEB,調用下單接口成功時,微信會返回包含支付跳轉URL等相關參數...

                      開發前配置

                      進行代碼接入前,需在微信後台填寫授權回調域名,此域名必須經過ICP備案

                      開發主要流程

                      正式開發

                      接口請求參數

                      以上便是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=wx22194530678545eb3713f2f10724143329&package=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%3Dwx22201221074146ac747121890095299503&package=2656135616&noncestr=1542888966&sign=e31dbc2d1231708ff8a982b15a6c7646

                      即爲得到的deepLink值,客戶端也可以通過此值直接調起支付

                      上一篇:PHP是如何實現微信掃碼支付的

                      下一篇:微信支付退款操作


                      評論

                      -->