php微信支付開發視頻教程,微信php開發包

本文目錄一覽:

php微信支付介面調用的教程視頻哪裡有

這個么有視頻哎,你看微信公眾號里有個API介面文檔就可以了,很容易實現的,剛做完用PHP調用微信客戶端用戶信息的功能。

如何利用PHP實現 APP端微信支付功能

一丶 PHP後台後台生成預支付交易單,返回正確的預支付交易回話標識後再在APP裡面調起支付!官方文檔:

根據文檔拼接微信需要的參數,這裡需要幾個方法,直接上代碼!

傳輸給微信的參數要組裝成xml格式發送,傳如參數數組!

public function ToXml($data=array())

    {

        if(!is_array($data) || count($data) = 0)

        {

           return ‘數組異常’;

        }

        $xml = “”;

        foreach ($data as $key=$val)

        {

            if (is_numeric($val)){

                $xml.=””.$key.””.$val.””;

            }else{

                $xml.=””.$key.””;

            }

        }

        $xml.=””;

        return $xml;

    }

2.生成隨機字元串,微信所需參數! 這裡方法很多,看自己愛好都行!

function rand_code(){

        $str = ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;//62個字元

        $str = str_shuffle($str);

        $str = substr($str,0,32);

        return  $str;

}

3.這裡是微信比較重要的一步了,這個方法會多次用到!生成簽名

private function getSign($params) {

        ksort($params);        //將參數數組按照參數名ASCII碼從小到大排序

        foreach ($params as $key = $item) {

            if (!empty($item)) {         //剔除參數值為空的參數

                $newArr[] = $key.’=’.$item;     // 整合新的參數數組

            }

        }

        $stringA = implode(“”, $newArr);         //使用  符號連接參數

        $stringSignTemp = $stringA.”key=”.”************************”;        //拼接key

        // key是在商戶平台API安全里自己設置的

        $stringSignTemp = MD5($stringSignTemp);       //將字元串進行MD5加密

        $sign = strtoupper($stringSignTemp);      //將所有字元轉換為大寫

        return $sign;

    }

4.傳遞參數給微信,生成預支付訂單! 接收微信返回的數據,在反給APP端,APP端調用支付介面,完成支付 ! APP端所需參數見微信文檔:;index=2

public function wx_pay() {

        $nonce_str = $this-rand_code();        //調用隨機字元串生成方法獲取隨機字元串

        $data[‘appid’] =’wxdbc5dc*******’;   //appid

        $data[‘mch_id’] = ‘1493*****’ ;        //商戶號

        $data[‘body’] = “APP支付測試”;

        $data[‘spbill_create_ip’] = $_SERVER[‘HTTP_HOST’];   //ip地址

        $data[‘total_fee’] = 1;                         //金額

        $data[‘out_trade_no’] = time().mt_rand(10000,99999);    //商戶訂單號,不能重複

        $data[‘nonce_str’] = $nonce_str;                   //隨機字元串

        $data[‘notify_url’] = ”; 接收支付後的通知,必須為能直接訪問的網址,不能跟參數

        $data[‘trade_type’] = ‘APP’;      //支付方式

        //將參與簽名的數據保存到數組  注意:以上幾個參數是追加到$data中的,$data中應該同時包含開發文檔中要求必填的剔除sign以外的所有數據

        $data[‘sign’] = $this-getSign($data);        //獲取簽名

        $xml = $this-ToXml($data);            //數組轉xml

        //curl 傳遞給微信方

        $url = “”;

        //header(“Content-type:text/xml”);

        $ch = curl_init();

        curl_setopt($ch,CURLOPT_URL, $url);

        if(stripos($url,”https://”)!==FALSE){

            curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        }    else    {

            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴格校驗

        }

        //設置header

        curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

        curl_setopt($ch, CURLOPT_HEADER, FALSE);

        //要求結果為字元串且輸出到屏幕上

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        //設置超時

        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        curl_setopt($ch, CURLOPT_POST, TRUE);

        //傳輸文件

        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

        //運行curl

        $data = curl_exec($ch);

        //返回結果

        if($data){

            curl_close($ch);

            //返回成功,將xml數據轉換為數組.

            $re = $this-FromXml($data);

            if($re[‘return_code’] != ‘SUCCESS’){

                json(“201”,’簽名失敗’);

            }

            else{

            //接收微信返回的數據,傳給APP!

                $arr =array(

                    ‘prepayid’ =$re[‘prepay_id’],

                    ‘appid’ = ‘wxdbc5dc*****’,

                    ‘partnerid’ = ‘14937****’,

                    ‘package’ = ‘Sign=WXPay’,

                    ‘noncestr’ = $nonce_str,

                    ‘timestamp’ =time(),

                );

                //第二次生成簽名

                $sign = $this-getSign($arr);

                $arr[‘sign’] = $sign;

                json(‘200′,’簽名成功’,$arr);

            }

        } else {

            $error = curl_errno($ch);

            curl_close($ch);

            json(‘201’,”curl出錯,錯誤碼:$error”);

        }

    }

5.將xml數據轉換為數組,接收微信返回數據時用到.

public function FromXml($xml)

    {

        if(!$xml){

            echo “xml數據異常!”;

        }

        //將XML轉為array

        //禁止引用外部xml實體

        libxml_disable_entity_loader(true);

        $data = json_decode(json_encode(simplexml_load_string($xml, ‘SimpleXMLElement’, LIBXML_NOCDATA)), true);

        return $data;

    }

二 .APP支付成功後,會調用你填寫的回調地址 . 返回參數詳見微信文檔:;index=3

// 微信支付回調

     function wx_notify(){

           //接收微信返回的數據數據,返回的xml格式

           $xmlData = file_get_contents(‘php://input’);

           //將xml格式轉換為數組

           $data = $this-FromXml($xmlData);

           //用日誌記錄檢查數據是否接受成功,驗證成功一次之後,可刪除。

           $file = fopen(‘./log.txt’, ‘a+’);

           fwrite($file,var_export($data,true));

           //為了防止假數據,驗證簽名是否和返回的一樣。

           //記錄一下,返回回來的簽名,生成簽名的時候,必須剔除sign欄位。

           $sign = $data[‘sign’];

           unset($data[‘sign’]);

           if($sign == $this-getSign($data)){

            //簽名驗證成功後,判斷返回微信返回的

            if ($data[‘result_code’] == ‘SUCCESS’) {

                //根據返回的訂單號做業務邏輯

                $arr = array(

                       ‘pay_status’ = 1,

                    );

                $re = M(‘order’)-where([‘order_sn’=$data[‘out_trade_no’]])-save($arr);

                //處理完成之後,告訴微信成功結果!

                if($re){

                    echo ”;exit();

                }

            }

            //支付失敗,輸出錯誤信息

            else{

                $file = fopen(‘./log.txt’, ‘a+’);

           fwrite($file,”錯誤信息:”.$data[‘return_msg’].date(“Y-m-d H:i:s”),time().”\r\n”);    

            }

    }

    else{

                $file = fopen(‘./log.txt’, ‘a+’);

           fwrite($file,”錯誤信息:簽名驗證失敗”.date(“Y-m-d H:i:s”),time().”\r\n”);    

            }

}

在這裡,微信APP支付流程就成功走完了!謝謝支持!

———————

如何用PHP實現微信支付,求教。新手!說明詳細點

以PHP語言為例,對微信支付的開發流程進行一下說明:

1.獲取訂單信息。

2.根據訂單信息和支付相關的賬號生成sign,並且生成支付參數。

3.將支付參數信息POST到微信伺服器,獲取返回信息。

4.根據返回信息生成相應的支付代碼(微信內部)或是支付二維碼(非微信內),完成支付。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248780.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:29
下一篇 2024-12-12 13:30

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種資料庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論