Skip to content

Commit

Permalink
Merge pull request #10 from killpanda/master
Browse files Browse the repository at this point in the history
support transfer customer service
  • Loading branch information
lepture committed Dec 30, 2014
2 parents deec830 + 5b21f4d commit 9687026
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
25 changes: 25 additions & 0 deletions flask_weixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@


class Weixin(object):

"""Interface for mp.weixin.qq.com
http://mp.weixin.qq.com/wiki/index.php
Expand Down Expand Up @@ -197,6 +198,11 @@ def reply(self, username, type='text', sender=None, **kwargs):
items = kwargs.get('articles', [])
return news_reply(username, sender, *items)

if type == 'customer_service':
service_account = kwargs.get('service_account', None)
return transfer_customer_service_reply(username, sender,
service_account)

return None

def register(self, key=None, func=None, **kwargs):
Expand Down Expand Up @@ -361,6 +367,25 @@ def news_reply(username, sender, *items):
return template % dct


def transfer_customer_service_reply(username, sender, service_account):
template = (
'<xml>%(shared)s'
'%(transfer_info)s</xml>')
transfer_info = ''
if service_account:
transfer_info = (
'<TransInfo>'
'<KfAccount>![CDATA[%s]]</KfAccount>'
'</TransInfo>') % service_account

dct = {
'shared': _shared_reply(username, sender,
type='transfer_customer_service'),
'transfer_info': transfer_info
}
return template % dct


def _shared_reply(username, sender, type):
dct = {
'username': username,
Expand Down
19 changes: 19 additions & 0 deletions test_weixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,14 @@ def print_all(**kwargs):
}
]
)
elif content == 'customer_service':
return weixin.reply(
username, type='customer_service', sender=sender)

elif content == 'customer_service_to_foo':
return weixin.reply(
username, type='customer_service', sender=sender,
service_account='foo@bar')
else:
return weixin.reply(
username, sender=sender, content='text reply'
Expand Down Expand Up @@ -258,6 +266,17 @@ def test_show(self):
rv = self.client.post(signature_url, data=text)
assert b'show reply' in rv.data

def test_customer_service(self):
text = self.__doc__ % 'customer_service'
rv = self.client.post(signature_url, data=text)
assert b'transfer_customer_service' in rv.data

def test_customer_service_to_foo(self):
text = self.__doc__ % 'customer_service_to_foo'
rv = self.client.post(signature_url, data=text)
assert b'transfer_customer_service' in rv.data
assert b'foo@bar' in rv.data

@raises(RuntimeError)
def test_no_sender(self):
@self.weixin.register('send')
Expand Down

0 comments on commit 9687026

Please sign in to comment.