线下活动抽奖PHP源码,对接公众号,实现关注公众号发送关键字获取抽奖码,通过平台进行摇号抽奖,可以二次开发(所有公众号都可对接)

php 专栏收录该内容
87 篇文章 2 订阅

最近公司需要做一款通过公众号获取幸运码抽奖的程序

跟微信公众号对接肯定得去看公众号开发文档,我花了几分钟大致了阅览了一下,满足发送关键词然后获取抽奖码功能无需申请任何权限,所有公众号都拥有的这个权限,如果有更多的权限那支持更多功能的拓展了,我们用了高级接口开发的,这是简化后的分享教程,支持所有订阅号服务号

先大致捋一下步骤

公众号服务器配置->接收用户信息->生成抽奖码->写入数据库

所需食材:

首先你得有一个微信公众号,还有一台闲置的服务器。

没有服务器也没关系,可以找图图提供测试地址

 

1.公众号服务器配置

登录微信公众号(订阅号、服务号都支持)

在左边功能菜单栏依次点击【开发】->【基本配置】

2.开通IP白名单

在IP白名单处设置IP白名单,把服务器的IP和本机的调试IP粘贴上去,一行一个

确定之后就开始配置公众号服务器

OK之后直接把代码拿过去用就行了,已经封装好了,导入数据库,只需把数据库连接信息改一下就可了

index.php

<?php
header('content-type:text/html;charset=utf-8');
define("TOKEN", "pamtest");
$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {$wechatObj->responseMsg();}else{$wechatObj->valid();}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if ($this->checkSignature()) {
            echo $echoStr;
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);

        if ($tmpStr == $signature) {
            return true;
        } else {
            return false;
        }
    }

    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTPS_RAW_POST_DATA"];
        if (!empty($postStr)) {
            $postObj = simplexml_load_string($postStr, 'SimpleXMLlement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);
            switch ($RX_TYPE) {
                case "text":
                    $result = $this->receiveText($postObj);
                    break;
                default:
                    $result = "unknow msg type: " . $RX_TYPE;
                    break;
            }
            echo $result;
        } else {
            echo "";
            exit;
        }
    }

    private function receiveText($object)
    {
        if ($object->Content == "抽奖") {
            include "conn.php";
            $getuserid = mysqli_fetch_assoc(mysqli_query($link_mysql, "select wxid,luckyid from activities_1 where wxid='$object->FromUserName'"));
            if ($getuserid["wxid"] == $object->FromUserName) {
                $content = "您的幸运号码是:【" . $getuserid["luckyid"] . "】";
                $result = $this->transmitText($object, $content);
                return $result;
            } else {
                $luckyid = rand(1000, 9999);
                $getluckyid = mysqli_fetch_assoc(mysqli_query($link_mysql, "select luckyid from activities_1 where luckyid='$luckyid'"));
                if ($getluckyid["id"] == $luckyid) {
                    $content = "获取失败,请重新获取一次";
                    $result = $this->transmitText($object, $content);
                    return $result;
                } else {
                    $setuser = mysqli_query($link_mysql, "INSERT INTO activities_1 VALUES (null,'$object->FromUserName','$luckyid',now());");
                    if ($setuser == 1) {
                        $content = "您的幸运号码是:【" . $luckyid . "】";
                        $result = $this->transmitText($object, $content);
                        return $result;
                    }
                    else
                    {
                        $content = "服务器繁忙,请稍后重试";
                        $result = $this->transmitText($object, $content);
                        return $result;
                    }
                }
            }
        }
    }

    private function transmitText($object, $content)
    {
        $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $result;
    }
}

conn.php

<?php
//数据库链接
$link_mysql_array = array("dizhi"=>"localhost","user"=>"test123456","password"=>"test123456","base"=>"test123456");
$link_mysql = mysqli_connect($link_mysql_array["dizhi"],$link_mysql_array["user"],$link_mysql_array["password"],$link_mysql_array["base"]); 
if(!$link_mysql)
{
    echo("数据库链接失败:".mysqli_connect_error());
}
?>

activities_1.sql

CREATE TABLE `activities_1` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `wxid` varchar(255) DEFAULT NULL COMMENT '微信用户唯一ID',
  `luckyid` varchar(255) DEFAULT NULL COMMENT '抽奖码',
  `stime` varchar(255) DEFAULT NULL COMMENT '操作时间',
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='cj';

都配置完之后我们到公众号测试下效果

成功取到抽奖码

用户能正常获取抽奖码,我们后台也取到了,然后就是需要一个抽奖前端

在网上随便找了个源码微改,换个背景图就是一个简单的抽奖程序了...

这也是针对于线下活动抽奖设计的一个程序

支持二开,改成线上抽奖或者其他任何自定义功能都可以,非常方便!

条件允许的情况下可以写个后台方便管理....

未完待续......(2020-12-21)

 

 

文档参考

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[this is a test]]></Content>
  <MsgId>1234567890123456</MsgId>
</xml>

 

参数描述
ToUserName开发者微信号
FromUserName发送方帐号(一个OpenID)
CreateTime消息创建时间 (整型)
MsgType消息类型,文本为text
Content文本消息内容
MsgId消息id,64位整型

 

公众平台接口域名说明

开发者可以根据自己的服务器部署情况,选择最佳的接入域名(延时更低,稳定性更高)。除此之外,可以将其他接入域名用作容灾用途,当网络链路发生故障时,可以考虑选择备用域名来接入。请开发者使用域名进行API接口请求,不要使用IP作为访问。若有需要开通网络策略,开发者可以从获取微信服务器IP地址定期获取最新的IP信息。

  1. 通用域名(api.weixin.qq.com),使用该域名将访问官方指定就近的接入点;

  2. 通用异地容灾域名(api2.weixin.qq.com),当上述域名不可访问时可改访问此域名;

  3. 上海域名(sh.api.weixin.qq.com),使用该域名将访问上海的接入点;

  4. 深圳域名(sz.api.weixin.qq.com),使用该域名将访问深圳的接入点;

  5. 香港域名(hk.api.weixin.qq.com),使用该域名将访问香港的接入点。

 

 

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 数字50 设计师:CSDN官方博客 返回首页

打赏作者

BUG制造者:图图

没有人会去使用打赏这个功能。

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值