python实现微信QQ消息多次频繁发送

实现逻辑:

1.先把需要发送的内容写入到剪切板

2.模拟按键Ctrl+V粘贴

3.根据自己实际情况选择按Enter或者Ctrl+Enter发送消息(设置sendWithCtrl参数),注意,要先按Ctrl再按Enter这个逻辑不能错

import win32clipboard as w
import win32con
import win32api
import time

def setText(aString):#写入剪切板
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_TEXT, aString)
    w.CloseClipboard()
if __name__=='__main__':
    #如果使用Ctrl+Enter发送消息就设为True
    sendWithCtrl = False
    #程序延迟执行两秒
    time.sleep(2)
    #自动粘贴剪切板中的内容
    for i in range(0, 100):
        a = "你好".encode("GBK")
        setText(a)  # “你好”写入剪切板
        win32api.keybd_event(17,0,0,0) #ctrl的键位码是17
        win32api.keybd_event(86,0,0,0)#v的键位码是86
        win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
        win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)

        if(sendWithCtrl):
            win32api.keybd_event(17, 0, 0, 0)  # ctrl的键位码是17

        w
### 使用 Python 实现微信 JSAPI 支付集成 #### 准备工作 为了成功实现微信JSAPI支付,需先完成一系列准备工作。这包括但不限于获取必要的证书文件、设置商户平台上的回调地址以及确保服务器能够接收来自微信的通知。 - 商户号 (mch_id) - API 密钥 (__key__) - 应用ID (appid) 这些信息将在后续的接口调用中被频繁使用[^1]。 #### 统一下单请求 在发起支付前,需要通过统一下单接口获得预支付交易会话标识(prepay_id),这是构建前端所需参数的基础之一。下面是一个简单的例子来展示如何发送这个请求: ```python import requests from urllib.parse import quote_plus class WxPay(object): __url_unified_order = "https://api.mch.weixin.qq.com/pay/unifiedorder" @classmethod def unified_order(cls, body, out_trade_no, total_fee, spbill_create_ip, notify_url, trade_type='JSAPI', openid=None): params = { 'appid': APP_ID, 'mch_id': MCH_ID, 'nonce_str': cls._generate_nonce(), 'body': body, 'out_trade_no': out_trade_no, 'total_fee': str(total_fee), 'spbill_create_ip': spbill_create_ip, 'notify_url': notify_url, 'trade_type': trade_type, 'openid': openid # 如果是JSAPI模式,则必填 } xml_data = '<xml>{}</xml>'.format(''.join(['<{0}>{1}</{0}>'.format(k, v) for k, v in params.items()])) headers = {'Content-Type': 'application/xml'} response = requests.post(url=cls.__url_unified_order, data=xml_data.encode(), headers=headers) result_xml = response.content.decode() return cls.xml_to_dict(result_xml) @staticmethod def _generate_nonce(length=32): """生成随机字符串""" chars = string.ascii_letters + string.digits return ''.join(random.choice(chars) for _ in range(length)) ``` 上述代码片段展示了如何向微信支付后台提交订单详情并返回处理后的XML响应转换成字典形式的结果[^3]。 #### 获取 jsapi 参数 一旦获得了 `prepay_id` ,就可以利用它以及其他必要字段去准备传递给客户端的小程序端所需的支付参数集。这里给出了一种方法用于组装这些数据项,并最终得到可用于唤起支付界面的数据结构: ```python def get_jsapi_params(self, prepay_id): timestamp = int(time.time()) nonce_str = self._generate_nonce() package = f'prepay_id={quote_plus(prepay_id)}' sign_type = 'MD5' pay_sign_dict = { 'appId': APP_ID, 'timeStamp': str(timestamp), 'nonceStr': nonce_str, 'package': package, 'signType': sign_type } pay_sign = self.get_sign_str(pay_sign_dict).upper() final_params = {**pay_sign_dict, **{'paySign': pay_sign}} del final_params['appId'] # appId 不参与签名 return final_params ``` 这段逻辑实现了从服务端计算出所有必需的信息以便于小程序侧可以顺利启动支付流程。 #### 签名算法 对于任何涉及敏感操作的过程来说,安全都是至关重要的考量因素;因此,在整个过程中多次提及到了签名机制的重要性。以下是创建 MD5 类型哈希值的方法示例: ```python @staticmethod def get_sign_str(sign_dict: dict): data = '' sort_keys = sorted(sign_dict.keys()) # 对键按字母顺序排序 for key in sort_keys[:-1]: value = sign_dict[key] if isinstance(value, bool): value = str(int(value)).lower() elif not isinstance(value, str): value = str(value) data += '{}={}{}'.format(key, value, '&') last_key = list(sign_dict)[-1] data += '{}={}'.format(last_key, sign_dict[last_key]) data += '&key={}'.format(WX_PAY_KEY) md5_hasher = hashlib.md5() md5_hasher.update(data.encode(encoding="utf8")) hexdigest = md5_hasher.hexdigest().upper() return hexdigest ``` 该函数负责按照特定规则拼接待加密串,并应用 MD5 加密方式得出最终的签名结果[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值