HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    PHP部署ChatGPT(php部署環(huán)境)

    發(fā)布時(shí)間:2023-03-12 03:34:56     稿源: 創(chuàng)意嶺    閱讀: 64        問(wèn)大家

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于PHP部署ChatGPT的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    ChatGPT國(guó)內(nèi)免費(fèi)在線使用,能給你生成想要的原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    你只需要給出你的關(guān)鍵詞,它就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端,官網(wǎng):https://ai.de1919.com

    本文目錄:

    PHP部署ChatGPT(php部署環(huán)境)

    一、php小程序前端轉(zhuǎn)化為h5

    對(duì)于h5中生成海報(bào)大家都不陌生 最常見的方法是前端生成 用html2canvas 但是弊端就是畫質(zhì)太差 網(wǎng)上很多方法 但是依然不是很管用 最近做的h5中 用了php來(lái)生成 畫質(zhì)簡(jiǎn)直美得不行 1)采用熟練的JSP框架,每人一天可以改造2個(gè)頁(yè)面左右,計(jì)劃投入2人,風(fēng)險(xiǎn)最小雖然開發(fā)方法類似網(wǎng)頁(yè),但實(shí)際上是一種只能運(yùn)行在微信自己開發(fā)的瀏覽器中的特殊網(wǎng)頁(yè),它所能夠使用的所有功能都必須由微信瀏覽器提供;

    H5頁(yè)面:這是真正的網(wǎng)頁(yè)應(yīng)用,運(yùn)行在通用瀏覽器中,各種瀏覽器雖然在細(xì)微上有所差別,但總的來(lái)說(shuō)是一致的,微信瀏覽器同時(shí)也是一種通用瀏覽器,能夠支持真正的網(wǎng)頁(yè)應(yīng)用。

    因此我們才有可能在微信小程序和H5頁(yè)面之間進(jìn)行跳轉(zhuǎn),但這種跳轉(zhuǎn)是受到微信瀏覽器的嚴(yán)格控制的,因此我們有必要了解這些控制包括哪些。

    H5頁(yè)面所在的域名:假設(shè)你需要調(diào)轉(zhuǎn)的H5頁(yè)面URL為https://www.mysite.com/h5page,那么這里所說(shuō)的域名就是www.mysite.com,另外你沒(méi)有看錯(cuò),這個(gè)URL必須是https,如果你還沒(méi)有為你的網(wǎng)站加上SSL,那么就先去申請(qǐng)一個(gè)證書吧(注意必須是公開申請(qǐng)的證書,不能是自簽名的,微信不認(rèn)哦?。?/p>

    好了,這些都準(zhǔn)備好了,讓我們開始開發(fā)一個(gè)小例子。

    由于web-view組件是一個(gè)全屏組件,不能和其它小程序組件合用,因此需要獨(dú)立占據(jù)一個(gè)頁(yè)面,所以我們到例子就是在小程序的A頁(yè)面加一個(gè)鏈接,跳轉(zhuǎn)到B頁(yè)面,然后在B頁(yè)面使用web-view組件來(lái)加載H5頁(yè)面。

    2)采用主流分布式Vue框架,時(shí)間未知,風(fēng)險(xiǎn)未知;

    首先自我介紹下,本人是一名JAVA開發(fā)工程師,平時(shí)喜歡研究相關(guān)主流技術(shù)和挑戰(zhàn)自己。對(duì)此我還是比較傾向于第二種解決方案,但是第二種解決方案無(wú)疑是最復(fù)雜,最耗時(shí),最未知,風(fēng)險(xiǎn)最大。公司內(nèi)沒(méi)有人愿意承接。于是我抱著學(xué)習(xí)和研究的態(tài)度以及對(duì)主流技術(shù)的向往,我找到我們領(lǐng)導(dǎo)我是這樣說(shuō)的:我還是比較建議公司采用第二種方案。1)這無(wú)疑是給我們進(jìn)行敲門磚及學(xué)習(xí)的機(jī)會(huì);2)這是公司提升前端技術(shù)能力與主流技術(shù)看齊的機(jī)會(huì)。最后公司同意了我建議,采用方案二,有我來(lái)承接此事,進(jìn)行牽頭負(fù)責(zé)。

    中間心酸過(guò)程忽略,剛接下來(lái)第一天就后悔了,VUE用都沒(méi)用過(guò),還怎么玩。于是我花了大量的時(shí)間,看了大量文獻(xiàn),我這里使用到是Vue 2 + Vant 2 + axios + router。原來(lái)并不是什么網(wǎng)址拿來(lái)就可以設(shè)置跳轉(zhuǎn)的,你的小程序中就不能直接跳轉(zhuǎn)到百度上去,小程序能夠跳轉(zhuǎn)的域名必須在業(yè)務(wù)域名中進(jìn)行注冊(cè),總算這次是在小程序開發(fā)號(hào)里面設(shè)置了,但注意在服務(wù)號(hào)的設(shè)置里也有業(yè)務(wù)域名這個(gè)設(shè)置,不要搞混了(話說(shuō)微信起名也太沒(méi)有想象力了,簡(jiǎn)直是一坨漿糊)。這時(shí)候控制權(quán)已經(jīng)從小程序轉(zhuǎn)移到了H5頁(yè)面,但微信頁(yè)面跳轉(zhuǎn)內(nèi)部的機(jī)制比較復(fù)雜,涉及到了OAuth認(rèn)證之類的,所以這個(gè)錯(cuò)誤已經(jīng)是H5頁(yè)面報(bào)的了,這就需要到H5頁(yè)面關(guān)聯(lián)的服務(wù)號(hào)中去進(jìn)行設(shè)置,這次設(shè)置的項(xiàng)目叫做網(wǎng)頁(yè)授權(quán)域名,在公眾號(hào)設(shè)置的功能設(shè)置里由于小程序官方?jīng)]有提供外部H5網(wǎng)頁(yè)直接跳轉(zhuǎn)到小程序的api,所以目前只支持小程序內(nèi)嵌H5,并且只有內(nèi)嵌的H5才能跳回小程序在微信開發(fā)中工具里返回“{"base_resp":{"ret":-1}}”時(shí),需要點(diǎn)左上角“設(shè)置”--“項(xiàng)目設(shè)置”--勾選“不校驗(yàn)合法域名、web-view(業(yè)務(wù)域名)、TLS 版本以及 HTTPS 證書” 源碼中驗(yàn)證使用的是session 來(lái)校驗(yàn)驗(yàn)證碼是否正確。我這邊前端是小程序無(wú)法存session改用框架自帶的緩存。

    這里講一點(diǎn)轉(zhuǎn)Taro的調(diào)試經(jīng)驗(yàn),有報(bào)錯(cuò)的文件先拎出來(lái)放在一邊,因?yàn)閑s5,6語(yǔ)法差異,很多js文件轉(zhuǎn)es6是不支持的,所以會(huì)報(bào)錯(cuò),建議是先把所有報(bào)錯(cuò)的文件注釋,或者改成es6寫法再轉(zhuǎn)。我這邊是去掉了很多的文件才轉(zhuǎn)成功了的。這里需要自己一步一步調(diào)試解決報(bào)錯(cuò),轉(zhuǎn)成功之后根目錄多出來(lái)一個(gè)taroConvert的文件夾這說(shuō)明已經(jīng)轉(zhuǎn)Taro成功了,接下來(lái)就是運(yùn)行以及二次開發(fā)。

    進(jìn)入taroConvert文件夾(二次開發(fā)就在這個(gè)文件里面,小程序代碼不用管了),執(zhí)行命令 npm install 或者cnpm install 先拉取所有依賴。

    可以看一下package.json文件的運(yùn)行命令以及安裝的依賴,我這里是要運(yùn)行H5的,輸入命令 npm run dev:h5打開H5開發(fā)模式,這個(gè)步驟有可能會(huì)有個(gè)nerv.js不存在的報(bào)錯(cuò),可以安裝一下,然后在你文件src下面的的app.js import一下。

    執(zhí)行命令 import Nerv from 'nervjs',這個(gè)報(bào)錯(cuò)就會(huì)解決。其它的頁(yè)面代碼報(bào)錯(cuò)可以自己調(diào)試。開啟成功的話瀏覽器中會(huì)打開127.0.0.1:8082的窗口運(yùn)行項(xiàng)目。

    二、微信小程序怎么向外部php文件傳遞參數(shù)

    PAY頁(yè)面往 js_api_call.php 傳值 獲取不到的問(wèn)題

    echo 是可以echo出來(lái)的 但是

    這里不寫死就會(huì)報(bào)錯(cuò) $key0$

    <?php

    /**

    * JS_API支付demo

    * ====================================================

    * 在微信瀏覽器里面打開H5網(wǎng)頁(yè)中執(zhí)行JS調(diào)起支付。接口輸入輸出數(shù)據(jù)格式為JSON。

    * 成功調(diào)起支付需要三個(gè)步驟:

    * 步驟1:網(wǎng)頁(yè)授權(quán)獲取用戶openid

    * 步驟2:使用統(tǒng)一支付接口,獲取prepay_id

    * 步驟3:使用jsapi調(diào)起支付

    */

    //獲取信息

    @$name="支付測(cè)試-包包";

    @$price=0.01*100;

    @$hyid=$_GET['hyid'];

    @$out_trade_no=$_GET['num'];//訂單號(hào)

    include_once("../WxPayPubHelper/WxPayPubHelper.php");

    //使用jsapi接口

    $jsApi = new JsApi_pub();

    //=========步驟1:網(wǎng)頁(yè)授權(quán)獲取用戶openid============

    //通過(guò)code獲得openid

    if (!isset($_GET['code']))

    {

    //觸發(fā)微信返回code碼

    $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);

    Header("Location: $url");

    }else

    {

    //獲取code碼,以獲取openid

    $code = $_GET['code'];

    $jsApi->setCode($code);

    $openid = $jsApi->getOpenId();

    }

    //=========步驟2:使用統(tǒng)一支付接口,獲取prepay_id============

    //使用統(tǒng)一支付接口

    $unifiedOrder = new UnifiedOrder_pub();

    //設(shè)置統(tǒng)一支付接口參數(shù)

    //設(shè)置必填參數(shù)

    //appid已填,商戶無(wú)需重復(fù)填寫

    //mch_id已填,商戶無(wú)需重復(fù)填寫

    //noncestr已填,商戶無(wú)需重復(fù)填寫

    //spbill_create_ip已填,商戶無(wú)需重復(fù)填寫

    //sign已填,商戶無(wú)需重復(fù)填寫

    $unifiedOrder->setParameter("openid","$openid");//商品描述

    $unifiedOrder->setParameter("body","$name");//商品描述

    //自定義訂單號(hào),此處僅作舉例

    $timeStamp = time();

    $out_trade_no = WxPayConf_pub::APPID."$timeStamp";

    $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號(hào)

    $unifiedOrder->setParameter("total_fee","$price");//總金額

    $unifiedOrder->setParameter("notify_url","http://youjia.pinpai365.cn/weixinpay/demo/notify_url.php");//通知地址

    $unifiedOrder->setParameter("trade_type","JSAPI");//交易類型

    //非必填參數(shù),商戶可根據(jù)實(shí)際情況選填

    //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號(hào)

    //$unifiedOrder->setParameter("device_info","XXXX");//設(shè)備號(hào)

    //$unifiedOrder->setParameter("attach","XXXX");//附加數(shù)據(jù)

    //$unifiedOrder->setParameter("time_start","XXXX");//交易起始時(shí)間

    //$unifiedOrder->setParameter("time_expire","XXXX");//交易結(jié)束時(shí)間

    //$unifiedOrder->setParameter("goods_tag","XXXX");//商品標(biāo)記

    $unifiedOrder->setParameter("attach","2");//會(huì)員ID

    $prepay_id = $unifiedOrder->getPrepayId();

    //=========步驟3:使用jsapi調(diào)起支付============

    $jsApi->setPrepayId($prepay_id);

    $jsApiParameters = $jsApi->getParameters();

    //echo $jsApiParameters;

    ?>

    <html>

    <head>

    <meta charset="utf-8">

    <title>支付頁(yè)面</title>

    <script type="text/javascript">

    //調(diào)用微信JS api 支付

    function jsApiCall()

    {

    WeixinJSBridge.invoke(

    'getBrandWCPayRequest',

    <?php echo $jsApiParameters; ?>,

    function(res){

    WeixinJSBridge.log(res.err_msg);

    if(res.err_msg == "get_brand_wcpay_requestk"){

    window.location.href='/shop/successful.php?spmc=<?php echo $name; ?>&&price=<?php echo $price; ?>';

    //history.go(-1);

    }else{

    window.location.href='/shop/pay.php';

    }

    }

    );

    }

    if (typeof WeixinJSBridge == "undefined"){

    if( document.addEventListener ){

    document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);

    }else if (document.attachEvent){

    document.attachEvent('WeixinJSBridgeReady', jsApiCall);

    document.attachEvent('onWeixinJSBridgeReady', jsApiCall);

    }

    }else{

    jsApiCall();

    }

    </script>

    </head>

    </html>

    三、微信紅包PHP怎么開發(fā)

    代碼有兩個(gè)php文件

    1.oauth4.php

    <?php

    $code=$_GET['code'];

    $state=$_GET['state'];

    $appid='XXXX';

    $appsecret='XXXXXXXX';//

    if (empty($code)) $this->error('授權(quán)失敗');

    $token_url='https://api.weixin.qq.com/sns/oauth4/access_token?appid='.$appid'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';

    $token=json_decode(file_get_contents($token_url));

    if (isset($token->errcode)) {

    echo '<h1>錯(cuò)誤1</h1>'.$token->errcode;

    echo '<br/><h4>錯(cuò)誤信息1:</h4>'.$token->errmsg;

    exit;

    }

    session_start();

    $_SESSION['openid']= $token->openid;

    header('location:url/redpack.php');//要跳轉(zhuǎn)的文件路徑

    ?>

    2.redpack.php

    <?php

    //XXXXX。。是需要開發(fā)者自己填寫的內(nèi)容,注意不要泄密

     // 從session中獲取到openid;

    $openid=$_SESSION["openid"];

        if(empty($openid))

        {

    header('location:https://open.weixin.qq.com/connect/oauth4/authorize?appid=XXXXXXXX&redirect_uri=http://www.XXXXXXX.com/oauth4.php&respose_type=code&scope=snsapi_base&state=XXXX&connect_redirect=1#wechat_redirect');

        }

    }

    // 關(guān)鍵的函數(shù)

    public function weixin_red_packet(){

      // 請(qǐng)求參數(shù)

      // 隨機(jī)字符串

      $data['nonce_str']=$this->get_unique_value();

      //商戶號(hào),輸入你的商戶號(hào)

      $data['mch_id']="XXXXXXX";

      //商戶訂單號(hào),可以按要求自己組合28位的商戶訂單號(hào)

      $data['mch_billno']=$data['mch_id'].date("ymd")."XXXXXX".rand(1000,9999);

      //公眾帳號(hào)appid,輸入自己的公眾號(hào)appid

      $data['wxappid']="XXXXXXX";

      //商戶名稱

      $data['send_name']="XXXXX";

      //用戶openid,輸入待發(fā)紅包的用戶openid

      session_start();

      $data['re_openid']=$_SESSION["openid"];

      //付款金額

      $data['total_amount']="XXXX";

      //紅包發(fā)放總?cè)藬?shù)

      $data['total_num']="XXXX";

      //紅包祝福語(yǔ)

      $data['wishing']="XXXX";

      //IP地址

      $data['client_ip']=$_SERVER['LOCAL_ADDR'];

      //活動(dòng)名稱

      $data['act_name']="XXXXX";

      //備注

      $data['remark']="XXXXX";

      // 生成簽名

      //對(duì)數(shù)據(jù)數(shù)組進(jìn)行處理

      //API密鑰,輸入自己的K 微信商戶號(hào)里面的K

      $appsecret="XXXXXXXXXXXXXX"; //

      $data=array_filter($data);

      ksort($data);

      $str="";

      foreach($data as $k=>$v){

        $str.=$k."=".$v."&";

      }

      $str.="key=".$appsecret;

      $data['sign']=strtoupper(MD5($str));

      /*

        發(fā)紅包操作過(guò)程:

          1.將請(qǐng)求數(shù)據(jù)轉(zhuǎn)換成xml

          2.發(fā)送請(qǐng)求

          3.將請(qǐng)求結(jié)果轉(zhuǎn)換為數(shù)組

          4.將請(qǐng)求信息和請(qǐng)求結(jié)果錄入到數(shù)據(jù)庫(kù)中

          4.判斷是否通信成功

          5.判斷是否轉(zhuǎn)賬成功

       */

      //發(fā)紅包接口地址

      $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

      //將請(qǐng)求數(shù)據(jù)由數(shù)組轉(zhuǎn)換成xml

      $xml=$this->arraytoxml($data);

      //進(jìn)行請(qǐng)求操作

      $res=$this->curl($xml,$url);

      //將請(qǐng)求結(jié)果由xml轉(zhuǎn)換成數(shù)組

      $arr=$this->xmltoarray($res);

    }

    // 生成32位唯一隨機(jī)字符串

    private function get_unique_value(){

      $str=uniqid(mt_rand(),1);

      $str=sha1($str);

      return md5($str);

    }

    // 將數(shù)組轉(zhuǎn)換成xml

    private function arraytoxml($arr){

      $xml="<xml>";

      foreach($arr as $k=>$v){

        $xml.="<".$k.">".$v."</".$k.">";

      }

      $xml.="</xml>";

      return $xml;

    }

    // 將xml轉(zhuǎn)換成數(shù)組

    private function xmltoarray($xml){

      //禁止引用外部xml實(shí)體

      libxml_disable_entity_loader(true);

      $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);

      $arr=json_decode(json_encode($xmlstring),true);

      return $arr;

    }

    //進(jìn)行curl操作

    private function curl($param="",$url) {

      $postUrl = $url;

      $curlPost = $param;

      //初始化curl

      $ch = curl_init();

      //抓取指定網(wǎng)頁(yè)

      curl_setopt($ch, CURLOPT_URL,$postUrl);

      //設(shè)置header

      curl_setopt($ch, CURLOPT_HEADER, 0);

      //要求結(jié)果為字符串且輸出到屏幕上

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

      //post提交方式

      curl_setopt($ch, CURLOPT_POST, 1);

      // 增加 HTTP Header(頭)里的字段

      curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);

      // 終止從服務(wù)端進(jìn)行驗(yàn)證

      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

      //證書放到網(wǎng)站根目錄的cert文件夾底下

      curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.

            'cert'.DIRECTORY_SEPARATOR.'apiclient_cert.pem');

        curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.

            'cert'.DIRECTORY_SEPARATOR.'apiient_key.pem');

        curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.

            'cert'.DIRECTORY_SEPARATOR.'rootca.pem');

      //運(yùn)行curl

      $data = curl_exec($ch);

      //關(guān)閉curl

      curl_close($ch);

      return $data;

    }

    ?>

    可參考官方文檔進(jìn)行調(diào)整開發(fā),希望能有幫助,望采納

    四、構(gòu)建了PHP環(huán)境后,寫完的代碼放在哪

    phpnow中的根目錄中的htdocs文件夾就是你網(wǎng)頁(yè)(也就是你的站點(diǎn))的根目錄。當(dāng)你在瀏覽器地址欄輸入“http://localhost”或者“http://你的ip地址”的時(shí)候,瀏覽器進(jìn)入的就是這個(gè)htdocs文件夾。剛剛安裝完phpnow的時(shí)候,你的htdocs文件夾應(yīng)該有一個(gè)index.html文件,你第一次在瀏覽器地址欄輸入“http://localhost”或者“http://你的ip地址”的時(shí)候,瀏覽器會(huì)瀏覽到index.html這個(gè)網(wǎng)頁(yè),你需要在這個(gè)網(wǎng)頁(yè)測(cè)試一下數(shù)據(jù)庫(kù)是否ok。然后你把htdocs文件夾中的index.html改個(gè)名字或者移到別的地方去,然后把你的php文件放到這個(gè)文件夾中就Ok了。你再在瀏覽器地址欄輸入“http://localhost”或者“http://你的ip地址”,瀏覽器會(huì)主動(dòng)搜索根目錄也就是htdocs文件夾中的index文件為主頁(yè),但是如果你的根目錄同時(shí)存在index.html和index.php。那么瀏覽器會(huì)先讀取html文件,也就是先讀取index.html。你也可以在htdocs文件夾中新建一個(gè)其他的文件夾,比如你的文件是一個(gè)聊天室,那么你新建一個(gè)文件夾叫做chat。然后你把你的Php文件放到chat文件夾中。然后在瀏覽器地址輸入“http://localhost/chat”或者“http://你的ip地址/chat”你的php主頁(yè)就顯示出來(lái)了。你也可以利用地址欄不瀏覽主頁(yè)。比如你的Php文件中有個(gè)文件叫做top.php。那么你可以在地址欄輸入“http://localhost/chat/top.php”或者“http://你的ip地址/chat。php”,就Ok了,應(yīng)該說(shuō)清楚了吧??比較啰嗦了。

    以上就是關(guān)于PHP部署ChatGPT相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    chatpht

    PHP寫接口(php寫接口實(shí)現(xiàn)json文件讀?。?/a>

    iphone怎么用chatGPT(IPHONE怎么用2個(gè)咕咚)

    農(nóng)村景觀設(shè)計(jì)村民活動(dòng)區(qū)域(農(nóng)村景觀設(shè)計(jì)村民活動(dòng)區(qū)域分析)

    游戲策劃好找工作嗎(游戲策劃好找工作嗎知乎)