Home Backend Development PHP Tutorial PHP handles WeChat SDK interception of photo uploads

PHP handles WeChat SDK interception of photo uploads

Apr 26, 2018 pm 01:43 PM
php upload photo

This article mainly introduces PHP processing of WeChat SDK to intercept photo uploads. It has certain reference value. Now I share it with everyone. Friends in need can refer to it

PHP-side processing TP3.2 framework

1: Class name:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

namespace Home\Controller;

use Think\Controller;

use  app\common\Curl;

class ParentController extends Controller

{

    public function __construct(){

        parent::__construct();

        $this->appId = '你的appid';

        $this->appSecret = '你的appSecret';

        $openid = session('openid');

        // session("openid",'ogC7U1XRM3ZOqjLZ99O2coJjYsrU');

        if(!$openid){

            $this->get_openid();

        }

    }

Copy after login


2: Method:

Return necessary WeChat parameters to the client:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

/**

     * 给客户端返回必要微信参数

     * @Author   TGHan

     * @DateTime 2018-04-26

     * @return   [type]     [description]

     */

    public function modifyinfor() {

        $jsapiTicket = $this->getJsApiTicket();

        // 注意 URL 一定要动态获取,不能 hardcode.

        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

        $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

        $timestamp = time();

        $nonceStr = $this->createNonceStr();

        // 这里参数的顺序要按照 key 值 ASCII 码升序排序

        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

        $signature = sha1($string);

        $signPackage = array(

          "appId"     => $this->appId,

          "nonceStr"  => $nonceStr,

          "timestamp" => $timestamp,

          "url"       => $url,

          "signature" => $signature,

          "rawString" => $string

        );

        $this->assign('signPackage',$signPackage);

        $this->display();

    }

 

 

    public 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 function getJsApiTicket() {

        // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例

        $data =json_decode(file_get_contents("jsapi_ticket.json"));

        if ($data->expire_time < time()) {

            $accessToken = $this->getAccessToken();

            // 如果是企业号用以下 URL 获取 ticket

            // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";

            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

            $res = json_decode($this->httpGet($url));

            $ticket = $res->ticket;

            if ($ticket) {

                $data->expire_time = time() + 7000;

                $data->jsapi_ticket = $ticket;

                $fp = fopen("jsapi_ticket.json", "w");

                fwrite($fp, json_encode($data));

                fclose($fp);

            }

        } else {

            $ticket = $data->jsapi_ticket;

        }

        return $ticket;

    }

 

 

    public function getAccessToken() {

        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例

        $data =json_decode(file_get_contents("access_token.json"));

        if ($data->expire_time < time()) {

            // 如果是企业号用以下URL获取access_token

            // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";

            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";

            $res = json_decode($this->httpGet($url));

            $access_token = $res->access_token;

            if ($access_token) {

                $data->expire_time = time() + 7000;

                $data->access_token = $access_token;

                $fp = fopen("access_token.json", "w");

                fwrite($fp, json_encode($data));

                fclose($fp);

            }

        } else {

            $access_token = $data->access_token;

        }

        return $access_token;

    }

 

 

    public function httpGet($url) {

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($curl, CURLOPT_TIMEOUT, 500);

        // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。

        // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);

        curl_setopt($curl, CURLOPT_URL, $url);

 

 

        $res = curl_exec($curl);

        curl_close($curl);

 

 

        return $res;

    }

Copy after login

Three: Method:

Image upload

1, define the file path, write the image stream

2, get the image stream from the WeChat server

3. Upload the image and return the image path to the client

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

/*图片

    * 获取media_id

    */ 

    public function upload_head(){ 

        if(IS_POST){ 

            $serverId = I(&#39;post.media_id&#39;); 

            if(!empty($serverId)){ 

                $news_file = $this->doWechatPic( $serverId );

                $this->ajaxReturn(array("is_success"=>"success","msg"=>"上传成功","url"=>$news_file));

            }else{

                $this->ajaxReturn(array("is_success"=>"error","msg"=>"上传失败1"));

            }

        }

    

 

 

    /*

    * 从微信服务器获取图片流

    */ 

    public function doWechatPic($serverId){//media_id=jlJs_iQIOA-TKLuhk4nCdPEdXnJ6paIeToO8vr-WUGvz05-6i5n498EzI232xSxn 

        $media_id = $serverId;//提交过来的serverId即$media_id    

        $access_token = $this->getAccessToken();

        $pic_url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}"

        $filebody = file_get_contents($pic_url);//通过接口获取图片流 

        $filename = date("Ymd").&#39;_&#39;.uniqid().&#39;.jpg&#39;;//定义图片名字及格式 

        return $this->saveFile($filename, $filebody); 

    

 

 

    /*

    * 定义文件路径,写入图片流

    */ 

    public function saveFile($filename, $filecontent){ 

        $upload_dir = "./Public/static/images/headers";//保存路径,以时间作目录分层 

        $mkpath = $upload_dir;         

        if(!is_dir($mkpath)){ 

            if(!mkdir($mkpath)){ 

                die(&#39;no mkdir power&#39;); 

            

            if(!chmod($mkpath,0755)){//若服务器在阿里云上不建议使用0644 

                die(&#39;no chmod power&#39;); 

            

        }

        $savepath = $upload_dir.&#39;/&#39;.$filename;      

        if(file_put_contents($savepath, $filecontent)){//写入图片流生成图片

            $news_file = substr($savepath,1);

            return $news_file;//返回图片路径 

        }else

            die(&#39;save failed&#39;); 

        

 

 

    }

Copy after login

Four: After the image is uploaded, the client returns the image path and inserts it into the database

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public function save_child(){

        $openid = session("openid");

        $class_tid = session("class_tid");

        if(IS_POST){

            $data = array();

            $data[&#39;cd_head&#39;] = I(&#39;post.cd_head&#39;) ? I(&#39;post.cd_head&#39;) : &#39;&#39;;

            $data[&#39;cd_name&#39;] = I(&#39;post.cd_name&#39;) ? I(&#39;post.cd_name&#39;) : &#39;&#39;;

            $data[&#39;cd_birthday&#39;] = I(&#39;post.cd_birthday&#39;) ? I(&#39;post.cd_birthday&#39;) : &#39;&#39;;

            $data[&#39;cd_sex&#39;] = I(&#39;post.cd_sex&#39;) ? I(&#39;post.cd_sex&#39;) : &#39;&#39;;

            $editData = M("parent_child")->where("class_tid=&#39;{$class_tid}&#39; and wx_openid=&#39;{$openid}&#39;")->save($data);

            if($editData !== false){

                $this->ajaxReturn(array("is_success"=>"success","msg"=>"修改成功"));

            }else{

                $this->ajaxReturn(array("is_success"=>"error","msg"=>"修改失败"));

            }

        }

    }

Copy after login

Related recommendations:

How to process form upload files in PHP

Steps in PHP to process bmp format images

The above is the detailed content of PHP handles WeChat SDK interception of photo uploads. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP Creating Validators CakePHP Creating Validators Sep 10, 2024 pm 05:26 PM

Validator can be created by adding the following two lines in the controller.

CakePHP Logging CakePHP Logging Sep 10, 2024 pm 05:26 PM

Logging in CakePHP is a very easy task. You just have to use one function. You can log errors, exceptions, user activities, action taken by users, for any background process like cronjob. Logging data in CakePHP is easy. The log() function is provide

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP Quick Guide CakePHP Quick Guide Sep 10, 2024 pm 05:27 PM

CakePHP is an open source MVC framework. It makes developing, deploying and maintaining applications much easier. CakePHP has a number of libraries to reduce the overload of most common tasks.

See all articles