H5活动抽现金红包,微信第三方APi接口代发红包_代发微信红包-程序员宅基地

最近需要做一个能抽奖发红包的H5活动,用在微信上,本身微信支付自带了发红包功能,但是奈何开通此功能需要微信
支付入驻满90天并且有1个月以上的交易流水,所以就放弃了,然后采用第三方接口实现红包,第三方接口正常的逻辑
是:钱充值到第三方平台,其实钱是冲到了第三方的微信支付账号,然后调用第三方接口,第三就给用户发送红包链接
,用户点击就可以领取红包啦。

这里采用的第三方接口是:摇摇啦SCRM(技术Wechat:18674509508) 正常流程是:1、注册账号;2、可以找技术申请
接口测试权限;3、正式使用的用户,平台会拉一个微信技术对接群提供技术支持;

示例代码:

        /**

        * [testhongbao 红包测试]

        */

        public function testhongbao() {

 

                //1、获取红包链接

                //实例化

                $yaoyaola = new \wechat\WechatYaoyaola();

 

                //发送数据

                $send_data = [

                            'title'      => '恭喜发财呀呀呀',

                            'sendname'   => '爱客猴信息科技',

                            'wishing'    => '心想事成哈哈哈',

                            'type'       => 0, //类型,0-红包接口,1-企业支付

                            'money'      => 30, //金额单位分,最低30也就是0.3元

                            'expire'     => 60, //过期时间

                            'orderid'    => create_order_sn(1, "xmsw"), //订单编号

                            'reqtick'    => time(), //时间戳

                            'rurl'       => '', //红包领取成功跳转页面

                            'cburl'      => url('notify', '', '', true) //红包领取成功异步通知

                ];

 

                //返回结果

                $result = $yaoyaola->getTicket($send_data);

                p($result);

 

                //2、获取订单记录

                //实例化

                $yaoyaola = new \wechat\WechatYaoyaola();

 

                //发送数据

                $send_data = [

                            'orderid'      => 'xmsw00328102516001206',

                            'ticket'       => '4d09c3a12d31a8faab1821547cc20c82'

                ];

 

                //返回结果

                $result = $yaoyaola->getOrderList($send_data);

                p($result);

        }

基类:

<?php

/**

 * Author [ CopyLian ]

 * Date: [ 2018.11.10 ]

 * Email: [ [email protected] ]

 * Site: [ https://www.copylian.com/ ]

 * Description: [ 摇摇啦红包接口基类 ]

 */

namespace wechat;

 

class WechatYaoyaola {

 

    //参数签名密钥

    private $apikey = "xxxx";

 

    //客户编号

    private $uid = 123456;

 

    //票据生成地址

    private $hbticket = 'http://www.yaoyaola.cn/index.php/exapi/hbticket';

 

    //获取红包地址

    private $getTicketUrl = 'http://www.yaoyaola.cn/index.php/exapi/gethb/';

 

    //订单查询地址

    private $getOrderUlr = 'http://www.yaoyaola.cn/index.php/exapi/checkhb';

 

    /**

     * [FunctionName 生成签名]

     * @param array $send_data [红包数组]

     */

    private function sign($send_data = []) {

        //参数验证签名 md5(uid+type+orderid+money+reqtick+apikey),共32字节,字母都为小写

        $signstr = $send_data['uid'] . $send_data['type'] . $send_data['orderid'] . $send_data['money']. $send_data['reqtick'] . $this->apikey;

 

        //返回签名

        return md5($signstr);

    }

 

    /**

     * [getOrderList 红包查询接口:若orderid不为空,查询此订单号下所有记录,否则查询指定ticket对应的记录]

     * @param  array  $send_data [红包数组]

        $send_data = [

            'orderid'      => 'xmsw00328102516001206123',

            'ticket'       => '4d09c3a12d31a8faab1821547cc20c8211'

        ];

     */

    public function getOrderList($send_data = []) {

 

        //客户编号

        $send_data['uid'] = $this->uid;

 

        //订单编号

        if(!isset($send_data['orderid']) || empty($send_data['orderid'])){

            $send_data['orderid'] = '';

        }

 

        //票据

        if(!isset($send_data['ticket']) || empty($send_data['ticket'])){

            $send_data['ticket'] = '';

        }

 

        //请求

        $result = self::http($this->getOrderUlr, $send_data);

 

        //解析json数据

        $result = json_decode($result, true);

 

        //处理返回数据

        $rdata = [];

        if(isset($result['errcode']) && $result['errcode'] == 0){

            //成功返回信息

            if(!empty($send_data['orderid'])){

                //返回此订单号下所有记录

                $rdata = $result['orders'];

            } else {

                unset($result['errcode']);

                $rdata[0] = $result;

            }

        }

 

        //返回红包领取地址

        return $rdata;

    }

 

    /**

     * [getTicket 获取红包票据]

     * @param  array  $send_data [红包数组]

        $send_data = [

            'title'      => '恭喜发财',

            'sendname'   => '厦门税务',

            'wishing'    => '心想事成',

            'type'       => 0,

            'money'      => 30,

            'expire'     => 60,

            'orderid'    => create_order_sn(1, "xmsw"),

            'reqtick'    => time(),

        ];

     */

    public function getTicket($send_data = []) {

 

        //客户编号

        $send_data['uid'] = $this->uid;

 

        //红包类型,0使用红包接口,1表示使用企业付款接口:如果使用企业付款,金额可以大于200元,企业付款的通知消息只能显示sendname,不能显示活动名称和祝福语

        if(!isset($send_data['type']) || !in_array($send_data['type'], [0, 1])){

            $send_data['type'] = 0;

        }

 

        //红包金额,单位为分,不能低于30

        if(!isset($send_data['money']) || empty($send_data['money']) || $send_data['money'] < 30){

            $send_data['money'] = 30;

        }

        

        //红包超时时间,单位为秒,不指定则默认60秒

        if(!isset($send_data['expire']) || empty($send_data['expire'])){

            $send_data['expire'] = 60;

        }

                

        //自定义订单号,不超过60字节

        if(!isset($send_data['orderid']) || empty($send_data['orderid'])){

            $send_data['orderid'] = create_order_sn(1, "xmsw");

        }

 

        //请求时间戳,单位为秒,与北京标准时间误差不能超过30秒

        if(!isset($send_data['reqtick']) || empty($send_data['reqtick'])){

            $send_data['reqtick'] = time();

        }

 

        //签名

        $send_data['sign'] = $this->sign($send_data);

 

        //红包领取结果跳转url,用于给用户显示客户的自定义页面,通过GET方式传送三个参数(以下三行为平台传给rurl的参数),如果rurl为空,则跳转至系统默认结果页面

        //ticket: 红包回执

        //retmoney: 红包领取金额,单位为分,0为领取失败

        //retmsg: 返回信息

        if(!isset($send_data['rurl']) || empty($send_data['rurl'])){

            $send_data['rurl'] = '';

        }

 

        //服务器通知url,参数形式同rurl,用户红包领取成功时回调此url,失败则不回调,由客户方在红包超时后主动查询确认结果。

        if(!isset($send_data['cburl']) || empty($send_data['cburl'])){

            $send_data['cburl'] = '';

        }

 

        //红包标题

        if(!isset($send_data['title']) || empty($send_data['title'])){

            $send_data['title'] = '恭喜发财';

        }

 

        //红包发送方名称

        if(!isset($send_data['sendname']) || empty($send_data['sendname'])){

            $send_data['sendname'] = '多想互动';

        }

 

        //祝福语

        if(!isset($send_data['wishing']) || empty($send_data['wishing'])){

            $send_data['wishing'] = '心想事成';

        }

 

        //请求

        $result = self::http($this->hbticket, $send_data);

 

        //解析json数据

        $result = json_decode($result, true);

 

        //获取红包地址

        $rdata['ticket']    = '';

        $rdata['ticketUrl'] = '';

        if(isset($result['errcode']) && $result['errcode'] == 0 && isset($result['ticket'])){

            //成功获取票据,组装获取红包地址

            $rdata['ticketUrl'] = $this->getTicketUrl . $this->uid . "?ticket=" . $result['ticket'];

            $rdata['ticket']    = $result['ticket'];

        }

 

        //返回红包领取地址

        return $rdata;

    }

 

    /**

     * 发送HTTP请求方法,目前只支持CURL发送请求

     * @param  string $url    请求URL

     * @param  array  $param  GET参数数组

     * @param  array  $data   POST的数据,GET请求时该参数无效

     * @param  string $method 请求方法GET/POST

     * @return array          响应数据

     */

    protected static function http($url, $param, $data = '', $method = 'GET'){

        $opts = array(

            CURLOPT_TIMEOUT        => 30,

            CURLOPT_RETURNTRANSFER => 1,

            CURLOPT_SSL_VERIFYPEER => false,

            CURLOPT_SSL_VERIFYHOST => false,

        );

 

        /* 根据请求类型设置特定参数 */

        $opts[CURLOPT_URL] = $url . '?' . http_build_query($param);

 

        if(strtoupper($method) == 'POST'){

            $opts[CURLOPT_POST] = 1;

            $opts[CURLOPT_POSTFIELDS] = $data;

            

            if(is_string($data)){ //发送JSON数据

                $opts[CURLOPT_HTTPHEADER] = array(

                    'Content-Type: application/json; charset=utf-8',  

                    'Content-Length: ' . strlen($data),

                );

            }

        }

 

        /* 初始化并执行curl请求 */

        $ch = curl_init();

        curl_setopt_array($ch, $opts);

        $data  = curl_exec($ch);

        $error = curl_error($ch);

        curl_close($ch);

 

        //发生错误,抛出异常

        if($error) throw new \Exception('请求发生错误:' . $error);

 

        return  $data;

    }

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fre_dun/article/details/109484607

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法