当前位置: 首页 > news >正文

php实现微信推广海报代码示例

为什么80%的码农都做不了架构师?>>>   hot3.png

流程:      

                1、推广人输入“领取任务”关键字

                 2、服务端发送推广海报(内容:带推广人参数的二维码、推广人头像)

                 3、推广人进行推广

                 4、粉丝通过扫海报中二维码进行关注

                 5、 关注成功,服务端记录推广人邀请的粉丝数

代码实现:

        1,生成带有参数二维码和推广人头像的海报的示例:

    $openid = 'XXXXXXX';推广人加密后的微信号
    if(empty($openid)) return false;
    //原海报的地址
    $poster_path = './share20161209.jpg';

    //生成带推广人参数的永久二维码
    $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=XXXX";
    $data = [
        'action_name' => 'QR_LIMIT_STR_SCENE',
        'action_info' => [
            'scene' => ['scene_str' => 'invite_'.$openid],
        ],
    ];
    $data = json_encode($data);
    
    //通过curl post请求
    $result = $this->http_post($result);
    $result = json_decode($result);
    
    $url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . urlencode($result['ticket']);
    $ch = curl_init ();
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt ($ch, CURLOPT_URL, $url);
    ob_start ();
    curl_exec ($ch);
    $qr_content = ob_get_contents();
    ob_end_clean ();

    //缩放二维码大小为需要的大小,并将二维码加入到海报中
    $thumb = imagecreatetruecolor(300, 300);//创建一个300x300图片,返回生成的资源句柄
    //获取源文件资源句柄。接收参数为图片流,返回句柄
    $source = imagecreatefromstring($qr_content);

    //将源文件剪切全部域并缩小放到目标图片上,前两个为资源句柄
    imagecopyresampled($thumb, $source, 0, 0, 0, 0, 300, 300, 430, 430);

    //创建图片的实例,接收参数为图片
    $dst_qr = @imagecreatefromstring(file_get_contents($poster_path));

    //加水印
    imagecopy($dst_qr, $thumb, 225, 556, 0, 0, 300, 300);

    //销毁
    imagedestroy($thumb);

    ob_start();//启用输出缓存,暂时将要输出的内容缓存起来
    imagejpeg($dst_qr, NULL, 100);//输出
    $poster = ob_get_contents();//获取刚才获取的缓存
    ob_end_clean();//清空缓存
    imagedestroy($dst_qr);

    //获取头像,直接访问微信的获取用户接口,具体代码代码省略
    $user_info = $api->getUserinfo($openid);

    //$dst_icon,替换头像,方法和二维码大致相同,会将替换好的海报保存在临时文件中。具体代码此处省略
    $tmp_path = __DIR__."/../../../web/subscribe/images/$openid.jpg";
    imagejpeg($dst_icon, $tmp_path);
    imagedestroy($dst_icon);

    //将替换好的海报,新增到临时素材
    $post_data['media'] = curl_file_create($tmp_path);
    $url = "http://api.weixin.qq.com/cgi-bin/media/upload?access_token=xxxx&type=image";

    $result = json_decode(self::_httpPost($url, $post_data));
    if($result) {
        //删除临时文件
        unlink($tmp_path);
        return $result->media_id;
    }

      2, 给推广人发送海报代码示例

$media_id = ‘上传到临时素材的m媒体ID’
$textTpl = "<xml>
	<ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
	<CreateTime>%s</CreateTime>
	<MsgType><![CDATA[%s]]></MsgType>
    <Image>
	<MediaId><![CDATA[%s]]></MediaId>
	</Image>
</xml>";

$result = sprintf($textTpl, $fromusernam, $tousername, time(), 'image', $media_id);
echo $result;

    3, 用户关注事件,修改推广人邀请粉丝数代码示例

if (preg_match('|^qrscene_invite_(.*+)$|', $eventKey, $matches)) {
		$sceneStr = $matches[1];//值为推广人的openid
        //修根据openid数据库取相应推广邀请数据,重而进行数据修改,具体代码省略
}

总结:这样就实现了一个简单可以统计推广人的邀请粉丝数。此示例只支持一级推广。

转载于:https://my.oschina.net/u/863367/blog/806224

相关文章:

  • WPF老矣,尚能饭否——且说说WPF今生未来(下):安心
  • 2016第51周四外甥女走丢记
  • 如何通过包名知道是否应用已经在应用商店上线
  • ios图片适配问题
  • Cry on my shoulder
  • SPDY 是什么?如何部署 SPDY?
  • WebKit JavaScript Binding添加新DOM对象的三种方式
  • 把时间当作朋友——李笑来
  • mybatis(一)
  • Spring+JMS 队列模式 收发消息
  • 捕捉异常和异常的使用原则
  • testng入门教程14数据驱动(不同文件)
  • Exchange Server 2010禁用/启用(连接)邮箱
  • 陈晨-证券交易系统架构设计_挑战与实施经验分享
  • Qt实现端口扫描器
  • 深入了解以太坊
  • @angular/forms 源码解析之双向绑定
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • css系列之关于字体的事
  • HTTP请求重发
  • java中的hashCode
  • MySQL QA
  • oschina
  • Redis 懒删除(lazy free)简史
  • scala基础语法(二)
  • SQLServer之索引简介
  • SwizzleMethod 黑魔法
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue的全局变量和全局拦截请求器
  • 后端_MYSQL
  • 理解在java “”i=i++;”所发生的事情
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 学习笔记TF060:图像语音结合,看图说话
  • 赢得Docker挑战最佳实践
  • 正则学习笔记
  • PostgreSQL之连接数修改
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​低代码平台的核心价值与优势
  • #define 用法
  • #etcd#安装时出错
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (23)Linux的软硬连接
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (转)拼包函数及网络封包的异常处理(含代码)
  • *p++,*(p++),*++p,(*p)++区别?
  • ./configure,make,make install的作用
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .gitignore文件_Git:.gitignore
  • .NET Core 项目指定SDK版本