• 微信服务号开发的时候可能会用到微信小店的商品,这比起自己做商品做微信支付来说,安全上肯定可以得到保证。
    但是问题在于如何监控,用户的相关行为呢?
  • 自己开发可以控制回调,但是用户进行支付后,需要对订单或者说用户的支付行为进行监控,这就涉及微信小店的开发

本文主要记录如何监听用户的付款行为并支付成功后通过公众号发送客服消息。

一、监听用户的付款行为

1、理论部分

微信小店的接口是单独写在word中的,不知道为什么没有写在线的文档,可能是太多了吧 = =

下载地址:

http://mp.weixin.qq.com/wiki/6/ae98ac4a7219405153cedc9dddccacca.html

其他的接口可以自行查看文档,很详细,这里只记录订单付款成功的监控。

监听使用的接口是订单付款通知接口

  • 在用户在微信中付款成功后,微信服务器会将订单付款通知推送到开发者在公众平台网站中设置的回调URL(在开发模式中设置)中
  • 如未设置回调URL,则获取不到该事件推送。

其实也就是和用户发送消息一样,发送给message.php这个函数而已。

同样xml发送的消息:

<xml>
<ToUserName><![CDATA[weixin_media1]]></ToUserName>
<FromUserName><![CDATA[oDF3iYyVlek46AyTBbMRVV8VZVlI]]></FromUserName>
<CreateTime>1398144192</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[merchant_order]]></Event>
<OrderId><![CDATA[test_order_id]]></OrderId>
<OrderStatus>2</OrderStatus>
<ProductId><![CDATA[test_product_id]]></ProductId>
<SkuInfo><![CDATA[10001:1000012;10002:100021]]></SkuInfo>
</xml>

只不过唯一变化的就是:

  • msgtype类型是 event
  • orderid 订单的id
  • OrderStatus 订单状态
  • ProductId 用户付款的商品的id

2、逻辑

  1. 根据 http://www.ptbird.cn/wexin-develop-02.html 这篇文章中说的,判断消息类型的时候判断是否是event类型。
  2. 判断是 event类型后判断event是不是 merchant_order,merchant_order 代表是订单的消息,微信小店其他的event也都有相应的标识。
  3. 判断后判断付款状态是否是 2 ,2标示该订单付款成功

3、代码部分

代码只是在加载判断消息类型上:

需要注意的就是 要比较判断productID,也就是商品的产片id,才能判断是哪个商品

4、发送客服消息

在上面的逻辑判断成功之后,就可以发送成功的客服消息。

代码示例:


 $kfMsg=$this->getKeFuTextMsgJson($responseMsg,$fromUsername);
                           
        //接口:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
        $tokenArr=getToken();
        $accessToken=$tokenArr['access_token'];
        $url='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$accessToken;
        //发送消息 使用http_post_json函数
        $res=http_post_json($url,$kfMsg);

发送客服消息同样是post发送并发送json数据,为了整体开发方便我封装了一个json构造函数,只提供string,然后构造json就行了。

就是上面代码的 $this->getKeFuTextMsgJson($responseMsg,$fromUsername);

json中需要指明发给谁,内容是什么,也可以指明哪个客服发送。

//生成客服消息的json串【发送的是text类型的消息】
    //其中content是要发送的文字的内容,openid是要发送给的用户
    public function getKeFuTextMsgJson($content='',$openid=''){
        //文本消息格式
//        {
//            "touser":"OPENID",
//            "msgtype":"text",
//            "text":
//            {
//                "content":"Hello World"
//            }
//        }
        $jsonStr='{"touser":"'.$openid.'","msgtype":"text","text":{"content":"'.$content.'"}}';
        return $jsonStr;
    }
}