婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > php實現微信原生支付(掃碼支付)功能

php實現微信原生支付(掃碼支付)功能

熱門標簽:拉薩打電話機器人 合肥外呼系統app 哈爾濱400電話辦理到易號網 寶安400電話辦理 電銷機器人-快迭智能 h5 地圖標注 智能外呼電銷系統 沈陽人工智能電銷機器人公司 高識別電銷機器人

網上的很多PHP微信掃碼支付接入教程都頗為復雜,且需要配置和引入較多的文件,本人通過整理后給出一個單文件版的,只有200行代碼,希望可以給各位想接入微信掃碼支付的帶來些許幫助和借鑒意義。

直接運行該文件即可得到一個支付二維碼的圖片。

需要注意的事項:

1.該文件需放到支付授權目錄下,可以在微信支付商戶平臺->產品中心->開發配置中設置。
2.如提示簽名錯誤可以通過微信支付簽名驗證工具進行驗證:微信公眾平臺支付接口調試工具

代碼如下:

?php
header('Content-type:text/html; Charset=utf-8');
$mchid = 'xxxxx';     //微信支付商戶號 PartnerID 通過微信支付商戶資料審核后郵件發送
$appid = 'xxxxx'; //公眾號APPID 通過微信支付商戶資料審核后郵件發送
$apiKey = 'xxxxx';  //https://pay.weixin.qq.com 帳戶設置-安全設置-API安全-API密鑰-設置API密鑰
$wxPay = new WxpayService($mchid,$appid,$apiKey);
$outTradeNo = uniqid();   //你自己的商品訂單號
$payAmount = 0.01;     //付款金額,單位:元
$orderName = '支付測試';  //訂單標題
$notifyUrl = 'https://www.xxx.com/wx/';   //付款成功后的回調地址(不要有問號)
$payTime = time();   //付款時間
$arr = $wxPay->createJsBizPackage($payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime);
//生成二維碼
$url = 'http://qr.liantu.com/api.php?text='.$arr['code_url'];
echo "img src='{$url}' style='width:300px;'>";

class WxpayService
{
  protected $mchid;
  protected $appid;
  protected $apiKey;

  public function __construct($mchid, $appid, $key)
  {
    $this->mchid = $mchid;
    $this->appid = $appid;
    $this->apiKey = $key;
  }

  /**
   * 發起訂單
   * @param float $totalFee 收款總費用 單位元
   * @param string $outTradeNo 唯一的訂單號
   * @param string $orderName 訂單名稱
   * @param string $notifyUrl 支付結果通知url 不要有問號
   * @param string $timestamp 訂單發起時間
   * @return array
   */
  public function createJsBizPackage($totalFee, $outTradeNo, $orderName, $notifyUrl, $timestamp)
  {
    $config = array(
      'mch_id' => $this->mchid,
      'appid' => $this->appid,
      'key' => $this->apiKey,
    );
    $orderName = iconv('GBK','UTF-8',$orderName);
    $unified = array(
      'appid' => $config['appid'],
      'attach' => 'pay',       //商家數據包,原樣返回,如果填寫中文,請注意轉換為utf-8
      'body' => $orderName,
      'mch_id' => $config['mch_id'],
      'nonce_str' => self::createNonceStr(),
      'notify_url' => $notifyUrl,
      'out_trade_no' => $outTradeNo,
      'spbill_create_ip' => '127.0.0.1',
      'total_fee' => intval($totalFee * 100),    //單位 轉為分
      'trade_type' => 'NATIVE',
    );
    $unified['sign'] = self::getSign($unified, $config['key']);
    $responseXml = self::curlPost('https://api.mch.weixin.qq.com/pay/unifiedorder', self::arrayToXml($unified));
    $unifiedOrder = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
    if ($unifiedOrder === false) {
      die('parse xml error');
    }
    if ($unifiedOrder->return_code != 'SUCCESS') {
      die($unifiedOrder->return_msg);
    }
    if ($unifiedOrder->result_code != 'SUCCESS') {
      die($unifiedOrder->err_code);
    }
    $codeUrl = (array)($unifiedOrder->code_url);
    if(!$codeUrl[0]) exit('get code_url error');
    $arr = array(
      "appId" => $config['appid'],
      "timeStamp" => $timestamp,
      "nonceStr" => self::createNonceStr(),
      "package" => "prepay_id=" . $unifiedOrder->prepay_id,
      "signType" => 'MD5',
      "code_url" => $codeUrl[0],
    );
    $arr['paySign'] = self::getSign($arr, $config['key']);
    return $arr;
  }


  public function notify()
  {
    $config = array(
      'mch_id' => $this->mchid,
      'appid' => $this->appid,
      'key' => $this->apiKey,
    );
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    if ($postObj === false) {
      die('parse xml error');
    }
    if ($postObj->return_code != 'SUCCESS') {
      die($postObj->return_msg);
    }
    if ($postObj->result_code != 'SUCCESS') {
      die($postObj->err_code);
    }
    $arr = (array)$postObj;
    unset($arr['sign']);
    if (self::getSign($arr, $config['key']) == $postObj->sign) {
      echo 'xml>return_code>![CDATA[SUCCESS]]>/return_code>return_msg>![CDATA[OK]]>/return_msg>/xml>';
      return $postObj;
    }
  }

  /**
   * curl get
   *
   * @param string $url
   * @param array $options
   * @return mixed
   */
  public static function curlGet($url = '', $options = array())
  {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    if (!empty($options)) {
      curl_setopt_array($ch, $options);
    }
    //https請求 不驗證證書和host
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
  }

  public static function curlPost($url = '', $postData = '', $options = array())
  {
    if (is_array($postData)) {
      $postData = http_build_query($postData);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //設置cURL允許執行的最長秒數
    if (!empty($options)) {
      curl_setopt_array($ch, $options);
    }
    //https請求 不驗證證書和host
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
  }

  public static function createNonceStr($length = 16)
  {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $str = '';
    for ($i = 0; $i  $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }

  public static function arrayToXml($arr)
  {
    $xml = "xml>";
    foreach ($arr as $key => $val) {
      if (is_numeric($val)) {
        $xml .= "" . $key . ">" . $val . "/" . $key . ">";
      } else
        $xml .= "" . $key . ">![CDATA[" . $val . "]]>/" . $key . ">";
    }
    $xml .= "/xml>";
    return $xml;
  }
  /**
   * 獲取簽名
   */
  public static function getSign($params, $key)
  {
    ksort($params, SORT_STRING);
    $unSignParaString = self::formatQueryParaMap($params, false);
    $signStr = strtoupper(md5($unSignParaString . "key=" . $key));
    return $signStr;
  }

  protected static function formatQueryParaMap($paraMap, $urlEncode = false)
  {
    $buff = "";
    ksort($paraMap);
    foreach ($paraMap as $k => $v) {
      if (null != $v  "null" != $v) {
        if ($urlEncode) {
          $v = urlencode($v);
        }
        $buff .= $k . "=" . $v . "";
      }
    }
    $reqPar = '';
    if (strlen($buff) > 0) {
      $reqPar = substr($buff, 0, strlen($buff) - 1);
    }
    return $reqPar;
  }
}

github下載地址:weixinPay

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • ThinkPHP框架整合微信支付之Native 掃碼支付模式二圖文詳解
  • ThinkPHP框架整合微信支付之Native 掃碼支付模式一圖文詳解
  • php微信掃碼支付 php公眾號支付
  • PHP 接入微信掃碼支付總結(總結篇)
  • 分享微信掃碼支付開發遇到問題及解決方案-附Ecshop微信支付插件
  • PC端微信掃碼支付成功之后自動跳轉php版代碼
  • PHP 微信掃碼支付源代碼(推薦)
  • php實現微信掃碼支付
  • 微信公眾平臺開發教程⑤ 微信掃碼支付模式介紹

標簽:威海 成都 梅州 張家口 巴中 山東 林芝 泰州

巨人網絡通訊聲明:本文標題《php實現微信原生支付(掃碼支付)功能》,本文關鍵詞  php,實現,微信,原生,支付,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php實現微信原生支付(掃碼支付)功能》相關的同類信息!
  • 本頁收集關于php實現微信原生支付(掃碼支付)功能的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美xxxx在线观看| 九九九精品视频| 国产精品色噜噜| 久久婷婷一区二区三区| 亚洲精品一区二区三区四区高清| 91精品国产全国免费观看| 91麻豆精品国产91久久久久久| 欧美电影一区二区| 日韩欧美一二三区| 欧美激情综合五月色丁香小说| 国产亚洲综合性久久久影院| 日本一区免费视频| 亚洲欧美偷拍另类a∨色屁股| 伊人色综合久久天天人手人婷| 亚洲精品成人悠悠色影视| 亚洲chinese男男1069| 久久精品噜噜噜成人88aⅴ | 波多野结衣中文一区| 北条麻妃国产九九精品视频| 色吊一区二区三区| 欧美一区二区精品| 亚洲国产岛国毛片在线| 亚洲自拍偷拍麻豆| 精品在线播放免费| 91丨porny丨国产入口| 欧美日韩高清一区二区不卡 | 99久久精品国产一区| 欧美优质美女网站| xvideos.蜜桃一区二区| 亚洲黄色小视频| 精品一区二区综合| 欧美在线一区二区三区| 久久久99久久| 五月天网站亚洲| 成人av资源在线观看| 日韩限制级电影在线观看| 国产精品天干天干在线综合| 亚洲地区一二三色| av在线不卡观看免费观看| 日韩一区二区三区四区| 中文字幕一区二区不卡| 麻豆91精品视频| 欧洲亚洲精品在线| 国产精品久久久久aaaa樱花| 奇米综合一区二区三区精品视频| 91无套直看片红桃| 国产日韩欧美精品在线| 青青草一区二区三区| 91精彩视频在线观看| 国产欧美日韩综合精品一区二区| 亚洲国产成人av| 一本色道亚洲精品aⅴ| 中文子幕无线码一区tr| 蜜桃一区二区三区四区| 欧美视频日韩视频在线观看| 国产精品麻豆一区二区| 青青草精品视频| 欧美一区二区视频免费观看| 一区二区三区高清在线| 91社区在线播放| 国产精品久久久久婷婷| 国产精品中文字幕一区二区三区| 制服.丝袜.亚洲.另类.中文| 亚洲成人中文在线| 欧美性大战久久久久久久| 一区二区三区在线视频免费| 99久久久精品免费观看国产蜜| 国产日产欧美精品一区二区三区| 国产精品综合在线视频| 日韩免费看的电影| 久久成人免费网站| 精品少妇一区二区三区日产乱码| 蜜臀久久久久久久| 欧美一区二区三区四区久久| 亚洲成av人在线观看| 在线91免费看| 经典三级一区二区| 国产午夜精品久久久久久免费视 | 国产在线精品一区二区| 欧美www视频| 国产精品亚洲视频| 国产精品国产三级国产aⅴ无密码| 国产丶欧美丶日本不卡视频| 国产精品人成在线观看免费| 成年人午夜久久久| 亚洲一区日韩精品中文字幕| 欧美日韩精品一区二区在线播放| 亚洲成av人综合在线观看| 欧美不卡一区二区| 风流少妇一区二区| 一区二区三区日本| 日韩视频国产视频| www.日韩av| 日韩精品乱码免费| 国产欧美一区二区三区在线老狼| 色婷婷综合视频在线观看| 一区二区三区四区视频精品免费| 在线不卡免费欧美| 国产乱人伦偷精品视频不卡| 亚洲伦理在线免费看| 日韩一级免费观看| 91在线无精精品入口| 日韩中文字幕区一区有砖一区| 久久人人97超碰com| 色综合久久久久网| 麻豆91在线看| 一区二区久久久久久| 久久久久高清精品| 欧美日韩国产乱码电影| 国产成人在线观看| 日韩av在线发布| 国产精品久久久久一区二区三区| 欧美精品在线一区二区三区| 成人黄色在线看| 久草在线在线精品观看| 亚洲男人天堂av网| 国产亚洲综合在线| 337p亚洲精品色噜噜| 91亚洲精品一区二区乱码| 国产一区二区不卡在线| 午夜精品福利一区二区三区av| 国产精品午夜在线| 欧美电视剧免费全集观看| 欧美视频一区在线| 99re视频精品| 国产成人小视频| 狠狠色丁香婷婷综合久久片| 丝袜美腿亚洲色图| 亚洲综合色丁香婷婷六月图片| 欧美激情资源网| ww亚洲ww在线观看国产| 日韩一区二区三区在线观看| 欧美日韩在线免费视频| 91猫先生在线| 成人a区在线观看| 成人sese在线| 成人黄页毛片网站| 成人app软件下载大全免费| 国产成人午夜片在线观看高清观看| 日韩电影免费一区| 免费观看在线色综合| 日本网站在线观看一区二区三区 | 欧美精品在线观看播放| 欧美丝袜自拍制服另类| 欧美午夜在线一二页| 欧美在线观看18| 欧美日韩精品一区二区在线播放 | 韩国精品久久久| 久久精品国产99国产精品| 亚洲一卡二卡三卡四卡五卡| 亚洲人成7777| 欧美中文字幕不卡| 国产精品护士白丝一区av| 欧美午夜精品久久久| 国产福利一区在线| 亚洲五月六月丁香激情| 国产精品免费视频一区| 欧美电影免费观看高清完整版在线观看| 成人禁用看黄a在线| 欧美国产日韩在线观看| 欧美久久一区二区| 色一情一乱一乱一91av| 欧美色视频在线| 久久99精品久久久| 欧美激情中文字幕| 亚洲综合色在线| 午夜精品福利久久久| 美女精品自拍一二三四| 国产高清亚洲一区| 99国产欧美另类久久久精品 | 国产激情一区二区三区| 国产成都精品91一区二区三| 91香蕉视频mp4| 欧美一卡在线观看| 国产精品天干天干在观线| 亚洲高清在线视频| 韩国成人精品a∨在线观看| 91小视频免费观看| 欧美精品一区二区三区在线| 亚洲精品视频在线看| 另类中文字幕网| 91美女精品福利| 2014亚洲片线观看视频免费| 一区二区三区在线观看国产| 韩国成人在线视频| 欧洲av一区二区嗯嗯嗯啊| 精品国产1区二区| 夜色激情一区二区| 国产成人av资源| 欧美一区二区三区成人| 亚洲视频 欧洲视频| 久久国产生活片100| 91久久线看在观草草青青| 精品国产a毛片| 性做久久久久久久免费看| eeuss鲁一区二区三区| 精品久久久久久无| 午夜av电影一区| 91久久精品国产91性色tv| 国产精品免费久久|