/** * 发送现金红包 * @param $openid 接收红包用户openid * @param $money 发放金额,单位:分 * @param $total_num 红包个数, 1则为现金红包, 大于等于3则为裂变红包 * @param $send_name 商家名称 * @param $mch_billno 订单号 * @param $act_name 活动名称 * @param $wishing 祝福语 * @param $remark 备注 * @return array * @throws \Exception */ public function sendRedPack($openid, $money, $total_num, $send_name, $mch_billno, $act_name, $wishing, $remark) { $param = new ParamHelper(); $param->setParam("nonce_str", $this->getNonceStr()); $param->setParam("mch_billno", $mch_billno); $param->setParam("mch_id", $this->wx_pay_mchid); $param->setParam("wxappid", $this->appid); $param->setParam("send_name", $send_name); $param->setParam("re_openid", $openid); $param->setParam("total_amount", $money); $param->setParam("total_num", $total_num); $param->setParam("wishing", $wishing); $param->setParam("act_name", $act_name); $param->setParam("remark", $remark); if ($total_num * 100 > $money) { throw new \Exception("每个红包的平均金额必须在1.00元到200.00元之间."); } if ($total_num == 1) { //普通红包 $url = self::SEND_REDPACK_URL; $param->setParam("client_ip", $_SERVER['REMOTE_ADDR']); } else { if ($total_num < 3) { throw new \Exception("裂变红包个数必须介于(包括)3到20之间."); } //裂变红包 $param->setParam("amt_type", "ALL_RAND"); $url = self::SEND_GROUP_REDPACK_URL; } $param->setSign($this->wx_pay_key); $xmlData = $param->toXml(); $response = $this->postXmlCurl($xmlData, $url, true); $result = WxPayResults::init($response, false); return $result; }
/** * * 支付结果通用通知 * @param function $callback * 直接回调函数使用方法: notify(you_function); * 回调类成员函数方法:notify(array($this, you_function)); * $callback 原型为:function function_name($data){} */ public function notify($callback, &$msg) { //获取通知的数据 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //如果返回成功则验证签名 try { $result = WxPayResults::init($xml, $this->apiConfig->mchkey); } catch (WxPayException $e) { $msg = $e->errorMessage(); return false; } return call_user_func($callback, $result); }