无法通过send_qywx函数发送企业微信消息
(文章编辑中)
问题:
使用Ptrade内置的send_qywx函数向自己的企业微信账号发送消息,Ptrade终端显示“企业微信消息发送成功”,但实际上企业微信收不到消息。
(相关链接:API文档 - send_qywx发送企业微信信息)
原因:
阿猪测试了三家券商,都存在前述问题。阿猪推测应该是send_qywx函数已经和现在的企业微信不兼容了。
解决方法:
一、自己写代码替代send_qywx
1、获取Ptrade服务器的IP地址
新建一个策略,写入如下代码,记得将Corpid、Secret、Agentid替换成你自己的。
(相关链接:企业自建应用)
1 | import requests, json, datetime |
运行这个策略,Ptrade终端会显示如下报错信息。这表明Ptrade服务器与企业微信服务器的通信正常,但是Ptrade服务器的IP不在企业微信服务器的白名单内,被企业微信拒绝了。记住这个红框内的字符串,它就是Ptrade服务器的IP地址,后边会用到。
2、设置可信域名
在电脑浏览器中登录企业微信的管理后台,依次点击“应用”-你用于发送通知的自建应用,进入自建应用的管理界面。我们的目的是将Ptrade服务器的IP地址添加入“企业可信IP”名单中。
如果直接点击“企业可信IP”的“配置”,会提示“请先设置可信域名”,所以需要先设置可信域名。(相关阅读:企业内部开发配置域名指引)
如果你没有自己的域名,可以随便找一个免费的虚拟主机、函数计算应用,一般都会自带二级或多级域名,只要域名没有被企业微信屏蔽就可以用。因为免费服务不稳定,资源有时效性,所以阿猪不打算专门写教程,具体方法请大家自行百度。
3、设置可信IP
可信域名设置成功后,就可以继续设置可信IP了。点击“企业可信IP”中的“配置”,然后将前边得到的Ptrade服务器IP复制进来,再点击“确定”就可以了。
在阿猪测试的三家券商中,有两家添加可信IP后就可以正常从Ptrade发送企业微信消息了,有一家添加可信IP时提示“IP属于第三方服务商”,无法在自建应用中使用。对于后者,从技术层面讲是可以解决的,但是在操作层面涉及到券商的配合问题,可行性较差。而且我们的主要目的是用策略赚钱,而不是搞技术研究,所以不再深入讨论,感兴趣的读者可以参考企业可信IP配置指引自行研究。
4、在策略中加入消息发送模块
既然Ptrade内置的send_qywx函数已经失效,那我们就得自己写代码来替代。其实前边的代码就是一个完整的示例代码,只要替换成你的id和密钥就可以正常使用。
读者可以根据自己的需要在适当的时候调用SendMessage函数。例如我们想在下单后向企业微信发送成交结果,只需把成交结果作为参数传递给SendMessage函数就可以了。
二、使用替代方案
如果嫌上边的方法麻烦,或者遇到券商的IP无法设为可信IP的情形,可以尝试下边的方法作为替代方案。
1、使用email
(1)使用Ptrade内置的send_email函数
关于send_email函数的使用方法,读者可以参考API文档中的send_email - 发送邮箱信息。
(2)使用python内置的smtplib等模块
关于使用python内置模块实现发送email的方法,请读者先自行百度,后续阿猪会考虑在入门教程或者FAQ中专门写一篇文章来介绍。
2、使用企业微信的群机器人
是的,你没看错,又是通过企业微信。只不过这里不是使用企业自建应用发送消息,而是通过企业微信群的机器人来发送消息,“秘诀”就在于通过群机器人发送消息不受IP限制。
(1)创建一个企业微信群
(2)添加一个群机器人
(3)获取token
(4)在策略中加入消息发送模块