记住用户名密码
3. 调用类,以下是一个简单的sample 。
include("wxhongbao.class.php"); $usrWXOpenId = "123456987654"; //接收红包的用户的微信OpenId,捕获和辨识方法略~ $hb = new WXHongBao(); $hb->newhb($usrWXOpenId ,1000); //新建一个10元的红包,第二参数单位是 分,注意取值范围 1-200元 //以下若干项可选操作,不指定则使用class脚本顶部的预设值 $hb->setNickName("土豪有限公司"); $hb->setSendName("王富贵"); $hb->setWishing("恭喜发财"); $hb->setActName("发钱活动"); $hb->setRemark("有钱!任性!"); //发送红包 if(!$hb->send()){ //发送错误 echo $hb->err(); }else{ echo "红包发送成功"; }
原本的写法是
private function gen_Sign(){ unset($param); //将所有的变量构造成一个数组先 $param["act_name"]=$this->act_name; ... //过程略 $param["wxappid"]=$this->wxappid; ksort($param); //按照键名排序,sign算法要求 $sign_raw = http_build_query($param); //数组转换串接 $sign_raw .= "&key=".$this->apikey; //黏附最后的api秘钥参数,sign算法要求 $this->sign = strtoupper(md5($sign_raw)); //md5之后转大写,sign算法要求 }
查半天!错误是因为 http_build_query 会对中文进行urlencode,而微信要求的是utf8的原文,难怪md5出来的值不一致!老老实实把数组转换串接的那一行改写,用foreach循环手动串接。就正确了
private function gen_Sign(){ unset($param); //将所有的变量构造成一个数组先 $param["act_name"]=$this->act_name; ... //过程略 $param["wxappid"]=$this->wxappid; ksort($param); //按照键名排序,sign算法要求 //$sign_raw = http_build_query($param); //数组转换串接 $sign_raw = ""; foreach($param as $k => $v){ $sign_raw .= $k."=".$v."&"; } $sign_raw .= "key=".$this->apikey; //黏附最后的api秘钥参数,sign算法要求 $this->sign = strtoupper(md5($sign_raw)); //md5之后转大写,sign算法要求 }
目前有 0 条留言 其中:访客:0 条, 博主:0 条