微信红包发送问题

         微信红包发送准备条件

  • 公众号支持发送红包功能
  • 每次发送红包不能低于1元
  • 公众号支付证书下载
  • 获取到要发送红包的微信的openID/金额
        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
        $body = [
            'nonce_str' => sprintf('%10d%10d', rand(0, 9999999999), rand(0, 9999999999)),
            'mch_billno' => sprintf('%s%s2%09d', $mchid, date('Ymd'), $hongBaoLog->getId()),
            'mch_id' => $mchid,
            'wxappid' => $appid,
            'nick_name' => $data['nickname'],
            'send_name' => $data['send_name'],
            're_openid' => $data['openid'],
            'total_amount' => $data['amount'],
            'min_value' => $data['amount'],
            'max_value' => $data['amount'],
            'total_num' => 1,
            'wishing' => $data['wishing'],
            'client_ip' => '115.155.155.155',
            'act_name' => $data['act_name'],
            'remark' => $data['remark'],
        ];
        ksort($body);
        $query = urldecode(http_build_query($body));
        $stringSign = sprintf('%s&key=%s', $query, $key);
        $sign = md5($stringSign);
        $sign = strtoupper($sign);
        $body['sign'] = $sign;

        $xml = new \SimpleXMLElement('<xml></xml>');
        foreach ($body as $k => $v) {
            $xml->addChild($k, $v);
        }

        $certPath = sprintf('%s/misc/all.pem', $this->container->getParameter('kernel.root_dir'));

            $xml = $guzzle->post($url, [
                'body' => $xml->asXml(),
                'cert' => $certPath,
            ])->xml();

           请求返回处理

  • 返回是XML文件,需要解析xml文件拿到返回的数据
  • 涉及金额问题,根据返回值,如果有异常发送,必定要发送报错原因告诉给维护人员,并且要注意写日志!
            if (!isset($xml->result_code)) {
                return new JsonResponse(Commons::getResult('wechat api response result_code is null','500'));

            }

            if ('SUCCESS' != $xml->result_code) {
                $message = \Swift_Message::newInstance()
                    ->setSubject('红包接口通知!')
                    ->setFrom($this->getParameter('mailer_user'))
                    ->setTo($this->getParameter('app_error_receipants'))
                    ->setBody("$xml->return_msg"."红包发送失败,请知悉!");

                $this->get('mailer')->send($message);
                //将报错信息发送出去
                return new JsonResponse(Commons::getResult("$xml->return_msg",'500'));
            }
            $hongBaoLog->send();

 

 大笑求赞,留言

猜你喜欢

转载自demonli.iteye.com/blog/2362094
今日推荐