最热问题
  • 全部
  • 文章
  • 问答

  • 域名微信内拦截申诉?

    域名kaifa6.cn被拦截,本站所有发布内容经腾讯内容安全检测接口检测通过。 腾讯网址安全中心检测通过,但是微信中依然打不开 并已完成icp备案陕ICP备2025066529号-4,网安备案号:陕公网安备61011202001051号 请重新审核本站内容 [图片] [图片]

  • 习酒小程序提示腾讯安全防护系统检测到您的账号存在异常,操作失败?

    习习酒公众号客服说是腾讯天域系统提示他们无法处理,要联系腾讯客服。我该如何解除这个风险,微信风险检测没有检测到,求告知? [图片]

  • 网站在微信内访问出现"非微信官方网页,请确认是否继续访问"的拦截提示, 请帮忙解决?

    您好,域名 https://www.chenyanxi.top 在阿里云注册并备案通过,服务器也在阿里云,浏览器访问正常,我是网站开发者,访问时间2025/05/18,微信内访问网站出现“非微信官方网页,请确认是否继续访问”的拦截提示,网站符合《微信外部链接内容管理规范》,腾讯安全网址安全中心检测网页没有不安全的内容,请求核实后解除在微信内的访问拦截提示,谢谢。 [图片] [图片] [图片] [图片]

  • 微信小店的开放能力怎么通过uniapp vue3写法来调用,需要什么前置条件吗?无法通过文档示例调用

    https://developers.weixin.qq.com/miniprogram/dev/component/store-product.html

  • 调用 tcb-api.tencentcloudapi.com/web/functions/ 不成功?

    [代码]requestId[代码]: [代码]9a7c9ab6-909c-4344-ba98-77719633a351[代码] 请求在到达腾讯云的 API 接入层 ([代码]tcb-api.tencentcloudapi.com/web[代码]) 时,由于参数校验失败([代码]INVALID_PARAM[代码]),未能成功路由到您的云函数内部执行。 尝试调用 [代码]tcb-api.tencentcloudapi.com/web/functions/{function_name}[代码] 的过程。 tcb_adapter.py # flask_admin_panel/app/adapters/tcb_adapter.py import requests import json import base64 import hmac import hashlib import time import datetime from urllib.parse import quote_plus from flask import current_app import logging logger = logging.getLogger(__name__) class TCBAdapter: def __init__(self, env_id=None, secret_id=None, secret_key=None): # ... (属性定义与之前相同) ... self._env_id = env_id self._secret_id = secret_id self._secret_key = secret_key self._base_url = "https://tcb-api.tencentcloudapi.com/web" @property def env_id(self): if self._env_id is None: if not current_app: raise RuntimeError("TCBAdapter: Flask current_app is not available for env_id.") self._env_id = current_app.config.get('TCB_ENV_ID') if not self._env_id: raise ValueError("TCB_ENV_ID is not set in Flask config.") return self._env_id @property def secret_id(self): if self._secret_id is None: if not current_app: raise RuntimeError("TCBAdapter: Flask current_app is not available for secret_id.") self._secret_id = current_app.config.get('TCB_SECRET_ID') if not self._secret_id: raise ValueError("TCB_SECRET_ID is not set in Flask config.") return self._secret_id @property def secret_key(self): if self._secret_key is None: if not current_app: raise RuntimeError("TCBAdapter: Flask current_app is not available for secret_key.") self._secret_key = current_app.config.get('TCB_SECRET_KEY') if not self._secret_key: raise ValueError("TCB_SECRET_KEY is not set in Flask config.") return self._secret_key @property def base_url(self): return self._base_url def _gen_sign(self, params_to_sign): sorted_params = sorted(params_to_sign.items(), key=lambda x: x[0]) sign_str_parts = [] for k, v_original in sorted_params: v_str = str(v_original) # 确保是字符串 sign_str_parts.append(f"{k}={quote_plus(v_str)}") sign_str = "&".join(sign_str_parts) current_secret_key = self.secret_key if not current_secret_key: # ... (错误处理与之前相同) logger.error("TCBAdapter: Secret Key is not configured for signing.") raise ValueError("TCBAdapter: Secret Key is missing for signature generation.") hmac_obj = hmac.new( current_secret_key.encode('utf-8'), sign_str.encode('utf-8'), hashlib.sha256 ) return base64.b64encode(hmac_obj.digest()).decode('utf-8') def invoke_function(self, function_name, data=None): request_id_from_header = None try: url_path = f"/functions/{function_name}" # 已修正路径 full_url = f"{self.base_url}{url_path}" query_params_for_sign = { 'envName': self.env_id, 'timestamp': int(time.time() * 1000), # 13位毫秒级时间戳 'secretId': self.secret_id, 'action': function_name, # <--- 新增:将 action (值为函数名) 加入签名和查询参数 } # 注意:如果 TCB Web API 对 'action' 参数有特定的大小写要求(例如 'Action'), # 或者期望一个固定的值(例如 'InvokeCloudFunction'),则需要相应调整。 # 目前我们假设 'action' 的值就是云函数名,并且参数名是小写 'action'。 signature = self._gen_sign(query_params_for_sign) final_query_params = query_params_for_sign.copy() final_query_params['sign'] = signature headers = { 'Content-Type': 'application/json; charset=utf-8', } log_target = current_app.logger if current_app else logger # 日志部分与上一版本相同,省略以保持简洁 log_target.debug(f"TCB: Invoking function '{function_name}' at URL '{full_url}' with query_params: {final_query_params}") log_target.debug(f"TCB: Request Headers: {headers}") log_target.debug(f"TCB: JSON body for '{function_name}': {json.dumps(data if data is not None else {})}") response = requests.post( full_url, headers=headers, params=final_query_params, json=data or {} ) # 响应处理逻辑 (与您上一轮测试成功的版本中的详细处理逻辑一致) # ... [请从您之前能正确解析200 OK但内容是INVALID_PARAM的那个TCBAdapter.py版本中,复制详细的响应解析和错误抛出逻辑到这里] ... # 确保这部分能正确处理各种成功和失败情况,并记录requestId if 'X-TCB-Request-ID' in response.headers: request_id_from_header = response.headers['X-TCB-Request-ID'] log_target.debug(f"TCB Response for '{function_name}': Status Code: {response.status_code}, RequestId: {request_id_from_header or 'N/A'}") log_target.debug(f"TCB Response for '{function_name}': Headers: {response.headers}") log_target.info(f"TCB Response for '{function_name}': RAW TEXT: {response.text}") if response.status_code != 200: error_message_detail = response.text try: error_json = response.json() error_message_detail = error_json.get("message", response.text) req_id = error_json.get("requestId", request_id_from_header or 'N/A') code = error_json.get("code", f"HTTP_{response.status_code}") raise Exception(f"调用云函数失败 ({function_name}): Code: {code}, Message: {error_message_detail}, RequestId: {req_id}") except requests.exceptions.JSONDecodeError: raise Exception(f"调用云函数失败 ({function_name}) with status {response.status_code}: {response.text}, RequestId: {request_id_from_header or 'N/A'}") result = response.json() tcb_code = result.get('code') tcb_message = result.get('message') tcb_request_id = result.get('requestId', request_id_from_header or 'N/A') # 根据Copilot的提示,INVALID_PARAM 是主要的错误码 if tcb_code == 'INVALID_PARAM' or \ (isinstance(tcb_code, str) and tcb_code not in ['SUCCESS', 'OK', '0'] and not tcb_code.startswith('SUCCESS') and tcb_code != 'null' and tcb_code is not None): final_message = tcb_message or "TCB function returned an error code without a message." log_target.error(f"TCB function '{function_name}' error. Code: {tcb_code}, Message: {final_message}, RequestId: {tcb_request_id}, FullResponse: {result}") raise Exception(f"云函数错误 ({function_name}): {final_message} (Code: {tcb_code}, RequestId: {tcb_request_id})") # 成功的判断:如果 code 是 'SUCCESS', 'OK', '0', null(某些API返回null表示无业务错误) 或者不存在(直接是数据) # 并且必须要有 'data' 字段或者 result 本身就是数据 (排除了标准错误字段后) if 'data' in result: if isinstance(result['data'], str): # data 可能是字符串形式的JSON try: return json.loads(result['data']) except json.JSONDecodeError: log_target.warning(f"TCB function '{function_name}' 'data' field is a string but not valid JSON. Returning as string. Data: {result['data']}") return result['data'] return result['data'] # 如果没有 'data' 字段,但 code 表示成功 (包括 null 或不存在) elif (tcb_code is None or str(tcb_code).lower() in ['success', 'ok', '0', 'null']): log_target.info(f"TCB function '{function_name}' successful (Code: {tcb_code}), but 'data' key missing. Assuming result itself is the data or no data returned. Full response: {result}") # 移除标准响应字段,看是否剩下业务数据 response_data_candidate = {k: v for k, v in result.items() if k not in ['code', 'message', 'requestId']} # 如果云函数就是不返回任何业务数据,那么返回None或{}是合适的 return response_data_candidate if response_data_candidate else None # 或者返回 {} else: # 其他意外情况 log_target.error(f"TCB function '{function_name}' response is in an unexpected format. Full response: {result}, RequestId: {tcb_request_id}") raise Exception(f"云函数响应格式未知 ({function_name}): {result}, RequestId: {tcb_request_id}") except requests.exceptions.RequestException as req_err: # 网络层错误 log_target.error(f"TCB HTTP request failed for '{function_name}'. Error: {req_err}", exc_info=True) raise Exception(f"调用云函数网络请求失败 ({function_name}): {str(req_err)}") from req_err except Exception as e: # 其他未知错误 if isinstance(e, Exception) and hasattr(e, 'args') and e.args and ("云函数错误" in e.args[0] or "调用云函数失败" in e.args[0]): # 避免重复包装 raise log_target.error(f"TCB unhandled exception during invoke_function '{function_name}'. Error: {e}, RequestId: {request_id_from_header or 'N/A'}", exc_info=True) raise Exception(f"调用云函数时发生未知错误 ({function_name}): {str(e)}, RequestId: {request_id_from_header or 'N/A'}") from e # ... [其他方法如 get_categories, add_category 等保持不变] ... # [请确保从您之前的 TCBAdapter.py 复制所有其他方法到这里] # 分类操作方法 def get_categories(self): return self.invoke_function('getCategories') def add_category(self, category_payload): return self.invoke_function('addCategory', category_payload) def update_category(self, category_id, category_payload): payload_with_id = category_payload.copy() payload_with_id['_id'] = category_id return self.invoke_function('updateCategory', payload_with_id) def delete_category(self, category_id): return self.invoke_function('deleteCategory', {'_id': category_id}) # 菜品操作方法 def get_dishes(self, category_id=None): params = {} if category_id: params['category_id'] = category_id return self.invoke_function('getDishes', params if params else None) def add_dish(self, dish_payload): return self.invoke_function('addDish', dish_payload) def update_dish(self, dish_id, dish_payload): payload_with_id = dish_payload.copy() payload_with_id['_id'] = dish_id return self.invoke_function('updateDish', payload_with_id) def delete_dish(self, dish_id): return self.invoke_function('deleteDish', {'_id': dish_id}) def upload_file(self, file_path, cloud_path=None): import os with open(file_path, 'rb') as f: file_content_bytes = f.read() file_content_b64 = base64.b64encode(file_content_bytes).decode('utf-8') filename = os.path.basename(file_path) if cloud_path: full_path = f"{cloud_path.strip('/')}/{filename.strip('/')}" else: today = datetime.datetime.now().strftime('%Y%m%d') full_path = f"uploads/{today}/{filename.strip('/')}" upload_data_payload = { 'fileContent': file_content_b64, 'cloudPath': full_path } log_target = current_app.logger if current_app else logger log_target.debug(f"TCB: Calling 'uploadFile' function with cloudPath: {full_path}") upload_result_data = self.invoke_function('uploadFile', upload_data_payload) if not isinstance(upload_result_data, dict) or \ 'fileID' not in upload_result_data or \ 'url' not in upload_result_data: logger.error(f"TCB 'uploadFile' function returned unexpected data format: {upload_result_data}") raise Exception(f"TCB 'uploadFile' function response format error. Expected dict with 'fileID' and 'url'. Got: {upload_result_data}") return { 'fileID': upload_result_data['fileID'], 'url': upload_result_data['url'] } # 订单操作方法 def get_orders(self, status=None, start_date=None, end_date=None): params = {} if status: params['status'] = status if start_date: params['start_date'] = start_date if end_date: params['end_date'] = end_date return self.invoke_function('getOrders', params if params else None) def get_order(self, order_id): return self.invoke_function('getOrder', {'_id': order_id}) def update_order_status(self, order_id, status): return self.invoke_function('updateOrderStatus', {'_id': order_id, 'status': status}) # 用户操作方法 def get_users(self): return self.invoke_function('getUsers') def get_user(self, user_id): return self.invoke_function('getUser', {'_id': user_id}) # 排队操作方法 def get_queues(self, status=None): params = {} if status: params['status'] = status return self.invoke_function('getQueues', params if params else None) def update_queue_status(self, queue_id, status): return self.invoke_function('updateQueueStatus', {'_id': queue_id, 'status': status}) def get_queue(self, queue_id): return self.invoke_function('getQueue', {'_id': queue_id}) test_tcb_communication.py 测试通讯 import os import sys import logging from dotenv import load_dotenv # 导入 load_dotenv # 将项目根目录添加到 Python 路径,以便导入 app 和 config project_root = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, project_root) # 加载 .env 文件中的环境变量 # 假设 .env 文件与此脚本在同一目录(项目根目录) dotenv_path = os.path.join(project_root, '.env') if os.path.exists(dotenv_path): load_dotenv(dotenv_path) print(f".env 文件加载成功: {dotenv_path}") else: print(f"警告: 未找到 .env 文件于 {dotenv_path}。脚本将依赖已设置的环境变量。") # 配置日志,以便看到 TCBAdapter 的输出 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) def test_tcb_connection(): """ 测试 Flask 应用与 TCB 云函数的通信。 """ logger.info("开始 TCB 通信测试...") # 1. 尝试创建 Flask 应用上下文并加载配置 try: from app import create_app # 使用 .env 文件中或已设置的 FLASK_CONFIG 环境变量,默认为 'default' # config.py 文件中 TCB_ENV_ID 等配置会通过 os.environ.get() 读取由 dotenv 加载的环境变量 flask_app = create_app(os.environ.get('FLASK_CONFIG') or 'default') with flask_app.app_context(): # 推入应用上下文 logger.info("Flask 应用上下文创建成功。") logger.info(f"使用的 Flask 配置: {flask_app.config.get('ENV') or os.environ.get('FLASK_CONFIG') or 'default'}") logger.info(f"TCB_ENV_ID from config: {flask_app.config.get('TCB_ENV_ID')}") logger.info(f"TCB_SECRET_ID from config: {flask_app.config.get('TCB_SECRET_ID')}") logger.info(f"TCB_SECRET_KEY loaded: {'Yes' if flask_app.config.get('TCB_SECRET_KEY') else 'No'}") if not all([flask_app.config.get('TCB_ENV_ID'), flask_app.config.get('TCB_SECRET_ID'), flask_app.config.get('TCB_SECRET_KEY')]): logger.error("错误:TCB 配置信息不完整。请检查您的 .env 文件和 config.py 文件。") return # 2. 初始化 TCBAdapter from app.adapters.tcb_adapter import TCBAdapter tcb_adapter = TCBAdapter() logger.info("TCBAdapter 初始化成功。") # 3. 调用测试云函数 function_name = "testConnection" # test_payload = {"source": "flask_test_script_dotenv", "data": "ping_dotenv"} # 尝试1: 空的业务数据 test_payload = {} # 尝试2: 或者完全不传 data (让 TCBAdapter 中的 data or {} 变成 {}) # test_payload = None logger.info(f"准备调用云函数 '{function_name}',参数 (业务数据): {test_payload}") # logger.info(f"准备调用云函数 '{function_name}',参数: {test_payload}") try: # 如果 test_payload = None, TCBAdapter 会发送空json body {} response = tcb_adapter.invoke_function(function_name, data=test_payload) logger.info(f"云函数 '{function_name}' 调用成功!") logger.info(f"TCB 返回的响应 (data部分): {response}") if isinstance(response, dict) and response.get("message") == "Connection to TCB cloud function successful!": logger.info("测试通过:云函数按预期返回了成功消息。") logger.info(f"云函数收到的参数: {response.get('requestPayload')}") logger.info(f"云函数执行时间戳: {response.get('timestamp')}") else: logger.warning(f"测试警告:云函数返回的响应并非预期的成功结构。收到的响应: {response}") except Exception as e: logger.error(f"调用云函数 '{function_name}' 失败: {e}", exc_info=True) logger.error("请检查:") logger.error(" - 云函数名称是否正确且已部署。") logger.error(" - TCB 配置 (ENV_ID, SECRET_ID, SECRET_KEY) 是否正确且具有调用权限。") logger.error(" - VPS 的网络连接是否正常,能否访问 tcb-api.tencentcloudapi.com。") logger.error(" - 查看 Flask 应用日志和 TCB 云函数日志获取更详细的错误信息。") except ImportError as e: logger.error(f"导入模块失败: {e}", exc_info=True) logger.error("请确保此脚本位于项目根目录,并且 Flask 应用结构正确。") except Exception as e: logger.error(f"创建 Flask 应用或执行测试时发生未知错误: {e}", exc_info=True) logger.info("TCB 通信测试结束。") if __name__ == "__main__": # 现在脚本会自动从同目录下的 .env 文件加载环境变量 # .env 文件存在且包含所有必要的变量 test_tcb_connection() 测试日志: (venv) root@bjn:/var/www/bjn.bestherbs.cn# python test_tcb_communication.py .env 文件加载成功: /var/www/bjn.bestherbs.cn/.env 2025-05-19 15:54:27,609 - __main__ - INFO - 开始 TCB 通信测试... 2025-05-19 15:54:28,030 - __main__ - INFO - Flask 应用上下文创建成功。 2025-05-19 15:54:28,030 - __main__ - INFO - 使用的 Flask 配置: default 2025-05-19 15:54:28,030 - __main__ - INFO - TCB_ENV_ID from config: cloud1-2gp7tmuk8290cf92 2025-05-19 15:54:28,030 - __main__ - INFO - TCB_SECRET_ID from config: AKID65vJajmhT5d4PYZM4YoriMmyxjHdQ6aq 2025-05-19 15:54:28,030 - __main__ - INFO - TCB_SECRET_KEY loaded: Yes 2025-05-19 15:54:28,030 - __main__ - INFO - TCBAdapter 初始化成功。 2025-05-19 15:54:28,030 - __main__ - INFO - 准备调用云函数 'testConnection',参数 (业务数据): {} 2025-05-19 15:54:28,031 - app - DEBUG - TCB: Invoking function 'testConnection' at URL 'https://tcb-api.tencentcloudapi.com/web/functions/testConnection' with query_params: {'envName': 'cloud1-2gp7tmuk8290cf92', 'timestamp': 1747641268030, 'secretId': 'AKID65vJajmhT5d4PYZM4YoriMmyxjHdQ6aq', 'action': 'testConnection', 'sign': 'RKIGhBadTc8pjtrrc8D1cthpxHiQwbVrV4/37aioDkM='} 2025-05-19 15:54:28,031 - app - DEBUG - TCB: Request Headers: {'Content-Type': 'application/json; charset=utf-8'} 2025-05-19 15:54:28,031 - app - DEBUG - TCB: JSON body for 'testConnection': {} 2025-05-19 15:54:28,032 - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): tcb-api.tencentcloudapi.com:443 2025-05-19 15:54:28,240 - urllib3.connectionpool - DEBUG - https://tcb-api.tencentcloudapi.com:443 "POST /web/functions/testConnection?envName=cloud1-2gp7tmuk8290cf92&timestamp=1747641268030&secretId=AKID65vJajmhT5d4PYZM4YoriMmyxjHdQ6aq&action=testConnection&sign=RKIGhBadTc8pjtrrc8D1cthpxHiQwbVrV4%2F37aioDkM%3D HTTP/1.1" 200 219 2025-05-19 15:54:28,241 - app - DEBUG - TCB Response for 'testConnection': Status Code: 200, RequestId: N/A 2025-05-19 15:54:28,241 - app - DEBUG - TCB Response for 'testConnection': Headers: {'Date': 'Mon, 19 May 2025 07:54:24 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '219', 'Connection': 'keep-alive', 'Vary': 'Origin'} 2025-05-19 15:54:28,241 - app - INFO - TCB Response for 'testConnection': RAW TEXT: {"code":"INVALID_PARAM","message":"Invalid request param 请前往云开发AI小助手查看问题:https://tcb.cloud.tencent.com/dev#/helper/copilot?q=INVALID_PARAM","requestId":"9a7c9ab6-909c-4344-ba98-77719633a351"} 2025-05-19 15:54:28,241 - app - ERROR - TCB function 'testConnection' error. Code: INVALID_PARAM, Message: Invalid request param 请前往云开发AI小助手查看问题:https://tcb.cloud.tencent.com/dev#/helper/copilot?q=INVALID_PARAM, RequestId: 9a7c9ab6-909c-4344-ba98-77719633a351, FullResponse: {'code': 'INVALID_PARAM', 'message': 'Invalid request param 请前往云开发AI小助手查看问题:https://tcb.cloud.tencent.com/dev#/helper/copilot?q=INVALID_PARAM', 'requestId': '9a7c9ab6-909c-4344-ba98-77719633a351'} 2025-05-19 15:54:28,241 - __main__ - ERROR - 调用云函数 'testConnection' 失败: 云函数错误 (testConnection): Invalid request param 请前往云开发AI小助手查看问题:https://tcb.cloud.tencent.com/dev#/helper/copilot?q=INVALID_PARAM (Code: INVALID_PARAM, RequestId: 9a7c9ab6-909c-4344-ba98-77719633a351) Traceback (most recent call last): File "/var/www/bjn.bestherbs.cn/test_tcb_communication.py", line 69, in test_tcb_connection response = tcb_adapter.invoke_function(function_name, data=test_payload) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/bjn.bestherbs.cn/app/adapters/tcb_adapter.py", line 147, in invoke_function raise Exception(f"云函数错误 ({function_name}): {final_message} (Code: {tcb_code}, RequestId: {tcb_request_id})") Exception: 云函数错误 (testConnection): Invalid request param 请前往云开发AI小助手查看问题:https://tcb.cloud.tencent.com/dev#/helper/copilot?q=INVALID_PARAM (Code: INVALID_PARAM, RequestId: 9a7c9ab6-909c-4344-ba98-77719633a351) 2025-05-19 15:54:28,242 - __main__ - ERROR - 请检查: 2025-05-19 15:54:28,242 - __main__ - ERROR - - 云函数名称是否正确且已部署。 2025-05-19 15:54:28,242 - __main__ - ERROR - - TCB 配置 (ENV_ID, SECRET_ID, SECRET_KEY) 是否正确且具有调用权限。 2025-05-19 15:54:28,242 - __main__ - ERROR - - VPS 的网络连接是否正常,能否访问 tcb-api.tencentcloudapi.com。 2025-05-19 15:54:28,242 - __main__ - ERROR - - 查看 Flask 应用日志和 TCB 云函数日志获取更详细的错误信息。 2025-05-19 15:54:28,243 - __main__ - INFO - TCB 通信测试结束。 日志中没有记录,如下图。 [图片] 请帮助,分析并指出问题所在,是哪个参数导致了 [代码]INVALID_PARAM[代码],以及正确的参数规范是什么(包括必需参数、参数位置、参数名大小写、签名方法等所有细节) 谢谢。

  • 获取小程序服务内容类型缺少【商家自营】分类?

    https://api.weixin.qq.com/wxa/icp/query_icp_service_content_types?access_token= 接口返回没有商家自营 鲜花/园艺类目

    有用 0
    0
  • 小程序为什么会被判定为交易类小程序?

    我的小程序是个积分线下兑换制的线上导购商城,可以充值积分,使用积分购买商品并线下兑换,我的小程序类别里没有电商,商家自营等字样,无论怎么修改类别,都被判定为电商,需要提供订单管理与订单状态的接口[图片][图片][图片]

  • 地址列表接口是否能优化一下

    https://developers.weixin.qq.com/doc/store/shop/API/merchant/address/list.html 地址列表接口是否可以增加个入参,查询默认地址。 现在的列表接口,只返回id,要想知道哪个地址是默认地址,需要一个个调详情才能判断。

  • 一次性订阅消息可以满足购买服务的通知,如果想实现双向通知——即向买家也向卖家通知应该怎么做?

    我的小程序是一个类似于零工的平台,有人预约零工后,需要向零工发送一条消息,应该怎么做?因为别人预约他的服务的时候他并不知道,不能在购买时订阅,所以是不是可以实现呢?

  • 扫普通链接二维码打开小程序 发布后 使用一端时间后,就不发跳起小程序了,请问如何处理

    https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html

    有用 0
    0
  • 关于微信小程序本地缓存文件和本地用户文件的逻辑问题

    1.本地缓存文件只能通过 FileSystemManager.saveFile() 接口将本地临时文件保存获得。 引用网页:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/file-system.html 2.每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage/wx.setStorageSync等API对本地缓存进行读写和清理。 引用网页:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/storage.html 以上两种说法,到底是哪个对? 1.本地缓存文件只能通过本地临时文件保存获得? 2.本地缓存文件可以通过wx.setStorage等API对本地缓存进行读写和清理?

  • 微信内访问网站出现“无法确认该网页的安全性,请谨慎访问”的拦截提示?

    微信内访问网站出现“无法确认该网页的安全性,请谨慎访问”的拦截提示,网站符合《微信外部链接内容管理规范》,腾讯安全网址安全中心检测网页没有不安全的内容,请求核实后解除在微信内的访问拦截提示,谢谢 这是企业的毛绒玩具网站,湘ICP备2025118230号,域名已经备案。现在从微信里面点开就有,无法确认该网页的安全性,请谨慎访问。在下面申请恢复也好多天了,没有结果,该网站安全检测也没有安全问题,请贵公司麻烦解除一下,谢谢! [图片] [图片] [图片]

  • 你好,经平台验证,你的小程序对违法违规等不当信息的过滤机制不够完善,这个怎么处理?只能加API调用?

    [图片] 前天更新了小程序,昨天收到了上面这个消息通知,让调用API检测。然后我看了《微信小程序平台运营规范》5.18 内容安全:违规内容 小程序涉及未设置过滤违法、违规等不当信息内容的机制。必须调用内容安全检测接口校验文本/图片是否含有敏感内容,提升信息安全防护能力,降低被恶意利用导致传播恶意内容的风险。包括但不限于以下类型:   5.18.1 UGC平台类小程序,小程序为平台工具类,违规信息均为平台内用户发布,平台未对用户发布内容设置违法违规内容过滤机制。   5.18.2 昵称测试/算命类UGC小程序,小程序内可任意输入敏感违规内容,无安全过滤的。   5.18.3 抽奖类账号,用户发布违规内容的。 1、上面这几个类型我似乎也没有哪一个是符合的。5.18.1工具类吗?可是即使是算工具类,后面不是还带用户发布吗?我这个小程序不存在用户能发布内容的地方。 2、我这个小程序全程都是在前端这边处理的,没有服务端,图片也不会上传,断网下小程序依然可以使用,而且前端本地也不会存储用户选择的图片,用户关掉小程序就没了。 3、然后我去看了 多媒体内容安全识别mediaCheckAsync这个API,其中入参scenenumber场景枚举值(1 资料;2 评论;3 论坛;4 社交日志),所列4种场景跟我这个小程序似乎也挂不上边? 4、我仔细看了mediaCheckAsync相关文档,这个API是异步的,最长可达30分钟才能获取到结果,而且还是采用消息推送到服务端的。那么即使我去写一个服务端来调用,似乎也不合理吧?总不可能让用户选择完图片 一直等待(0-30分钟) 推送验证结果吧? 5、然后我看了下,我整个小程序里唯一可能产生 被恶意利用导致传播恶意内容 这个问题的 应该就是 小程序右上角...那里的 转发给朋友/分享到朋友圈 这两地方吧,但是这两地方我也处理了,设置了转发标题跟封面了。 想问一下这个问题应该怎么处理? 小程序页面如下: [图片][图片]

  • 服务商可以用自己的商户参数代替子商户发起微信小程序支付吗?

    我这边需要做涉及一个服务商分账功能模块的小程序,服务商是合作伙伴平台的,不是普通商户平台,这个小程序是服务商的,不是子商户的。之前是普通商户的时候,java后端发起支付的时候用普通商户的参数,比如私钥,证书序列号,商户号之类的参数进行发起的。那现在服务商下的子商户的发起支付调用的是服务商的参数还是子商户的参数呢,我看了看文档,有个服务商代特约商户发起JSAPI支付,但是这个微信小程序绑定这个服务商的商户号的时候又提示暂不支持该类型的商户号绑定本APPID,请点击拒绝结束该流程,这个问题该怎么解决呢?要是子商户发起支付只能用自己商户后台的参数,那一个个配置也太麻烦了吧。

  • openEmbeddedMiniProgram() 半屏拉起付呗支付报违规 ?

    项目采用uniapp,基库版本3.8.1,根据微信官方文档采用半屏拉起付呗支付,报错:由于小程序违规,该功能暂无法使用,我们是企业主体而非个人,在小程序半屏管理中也是申请通过了的,信息如下: [图片] [图片] 无论使用 uni.openEmbeddedMinProgram()方法还是wx.openEmbeddedminiProgram()方法都报违规信息无法拉起支付 [图片]

  • 微信小程序码在使用qq扫码时怎样强制使用微信打开?

    如标题,微信小程序码在使用qq扫码时怎样强制使用微信打开

  • 微信内访问网站出现“如需浏览请长按网址复制后使用浏览器访问的提示?

    [图片] 如需浏览请长按网址复制后使用浏览器访问的提示,网站符合《微信外部链接内容管理规范》,腾讯安全网址安全中心检测网页没有不安全的内容,网站也悬挂再腾讯云备案的备案号了,请求核实后解除在微信内的访问拦截提示,谢谢 [图片] [图片]

  • 小程序内打开webView 在webView内实现js支付报错?

    [图片]<template> <view class="box"> <!-- <view class="top"> 获取地址栏目 </view> <button @click="query">支付</button> <view class=""> {{code}} {{searchObj}} </view> --> <view> {{ obj }} </view> <view style="margin: 20px 0; color: #333; font-size: 14px;"> <text v-for="(log, idx) in logList" :key="idx">{{ log }}<br/></text> </view> </view> </template> <script> import config from './config/config.js'; export default { data() { return { code: '', obj: {}, searchObj: { appId: '', openId: '', bizId: '' }, logList: [] }; }, onLoad(option) { this.code = option.code; this.getOpenId(this.code); }, onError(err) { // uni.showToast({ // title:`${JSON.stringify(err)}`, // icon:'' // }) }, mounted() { if (!/MicroMessenger/i.test(navigator.userAgent)) { alert('请在微信内置浏览器中打开'); } }, methods: { async getOpenId(e) { let info = uni.getStorageSync('billInfo'); let data = { code: e, appId: info.appId }; let res = await config.interfaces.getOpenId(data); console.log(res, '获取到的openid'); if (res.code == 200) { let data = { bizType: info.bizType, bizId: info.bizId, payChannel: 'WX_PUB', expend: { open_id: res.data } }; if (data.bizType == 'MANUAL') { data.billId = info.billId; } else if (data.bizType == 'CONTRACT') { data.submitAmount = info.submitAmount; } console.log(data, '参数'); this.getPayInfo(data); } else { uni.showToast({ title: res.msg, icon: 'none' }); } }, async getPayInfo(e) { let res = await config.interfaces.getPayInfo(e); if (res.code == 200) { console.log(res.data); this.pay(res.data); } else { uni.showToast({ title: res.msg, icon: 'none' }); } }, pay(res) { this.logList.push('准备调起支付...'); const onBridgeReady = () => { this.logList.push('WeixinJSBridgeReady 事件触发,开始调用支付API'); WeixinJSBridge.invoke( 'getBrandWCPayRequest', { appId: res.payInfo.appId, //公众号ID,由商户传入 timeStamp: res.payInfo.timeStamp, //时间戳,自1970年以来的秒数 nonceStr: res.payInfo.nonceStr, //随机串 package: res.payInfo.package, signType: res.payInfo.signType, //微信签名方式: paySign: res.payInfo.paySign }, (res) => { this.logList.push('支付回调: ' + JSON.stringify(res)); console.log(res, '支付'); if (res.err_msg == 'get_brand_wcpay_request:ok') { this.logList.push('支付成功'); uni.showToast({ title: '支付成功', icon: 'none' }); uni.navigateBackMiniProgram({ extraData: {}, success: function () { console.log('关闭应用成功'); }, fail: function () { console.log('关闭应用失败'); } }); } else if (res.err_msg == 'get_brand_wcpay_request:cancel') { this.logList.push('支付取消'); uni.showToast({ title: '支付取消,请重新扫码', icon: 'none' }); } else if (res.err_msg == 'get_brand_wcpay_request:fail') { this.logList.push('支付失败'); uni.showToast({ title: '支付失败,请重新扫码', icon: 'none' }); } else { this.logList.push('支付api: ' + res.err_msg); uni.showToast({ title:"支付api:" + res.err_msg, icon: 'none', duration:5000 }); } } ); }; if (typeof WeixinJSBridge == "undefined") { this.logList.push('WeixinJSBridge 未定义,等待事件...'); if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } else { this.logList.push('WeixinJSBridge 已定义,直接调用onBridgeReady'); onBridgeReady(); } } } }; </script> <style scoped lang="scss"> .box { width: 100%; height: 100%; box-sizing: border-box; display: flex; flex-direction: column; } </style>

  • 第三方平台:为啥调用getComponentAccessToken接口报system error?

    curl -X POST \ > 'https://api.weixin.qq.com/cgi-bin/component/api_component_token' \ > -H 'Content-Type: application/json' \ > -d '{ > "component_appid": "xxxxx", > "component_appsecret": "xxxxx", > "component_verify_ticket": "xxxxxx" > }' {"errcode":-1,"errmsg":"system error rid: 6829eb1d-148ab48f-555eb2e1"} 不知道什么情况

  • We分析专业版开通,怎么进行对公款?现在支付方式中没有腾讯的对公账户信息

    公司要开通we分析的专业版服务,付款时发现无法进行对公账户打款。 公司财务有要求,必须要对公打款。但we分析平台给出的付款方式就是扫码支付和网银转账(付款额挺高,不适用个人支付再报销) 因此,需要申请获取we分析的对公打款账户信息,完成支付

运营专区
运营公告、规则解析与使用教程。
更多