• 注册
  • 发动态
  • 发帖子
  • 发视频
  • 发红包
  • 暂没有数据

  • 推荐
  • 视频
  • 关注
  • 瓷器
  • 字画
  • 玉石
  • 钱币
  • 铜器
  • 木器
  • 紫砂
  • 杂项
  • [ls_fbk]
  • 查看全文
  • 查看作者
  • 宫论项目开发记录

    记录2023年项目进度周期。

  • 2
  • 427
  • 0
  • 8.56w
  • 小小乐小可鸭鸭

    请登录之后再进行评论

    登录
  • 0
    小小乐lv.2实名用户
    2024年6月24日
    1、新增页面【/global/pay/recharge_money.php】余额充值页面,页面唯一标识【recharge-money】用户可以通过这个页面对账户进行余额充值。该充值页面与旧版充值页面的区别在于,新版的账户余额充值将会采用全新的统一支付业务体系。支付功能将通过xc_payment_sdk_hook来发起请求,并且通过余额充值功能,完成所有支付接口的调试功能。包括不限于【充值、付款、拦截检测、关闭订单、回调通知、退款】等系列操作。
    2、余额充值页面已集成ajax_page访问拦截事件,并且该页面已通过页面管理配置,将其加入到强制登录页面列表。以下两种情况的来访,会触发拦截事件。1、如果用户未登录情况下访问余额充值页面,会被拦截并提示对方登录。防止游客进入余额充值页面(余额是和账户关联的,因此必须要求登录后才能使用)。2、页面访问过于频繁,会触发页面访问拦截。需要通过人机交互验证才能解锁页面的正常访问。注:统一付款页面也集成ajax_page访问拦截事件。
    3、新版余额充值页面内容和旧版页面基本大致一样,顶部展示用户的当前账户可用余额数量,然后提供一个li列表,展示余额充值菜单选择(1元、5元、10元、50元、100元、200元)。同时底部增加一个可输入的input表单,用户可以自定义充值金额 当用户选择li表单也会自动重置为对应的数字。提供一个余额说明的介绍,后台自定义该部分内容,可以填写一些余额的使用简介说明。右上角增加一个记录功能,指向账户余额记录页面。
    4、支付参数配置新增支付场景【账户余额充值】唯一标识:recharge_money、付款方式选择:支付宝付款、微信付款。登录后限制:开启状态(禁止游客进行账户充值)。开启收货地址:关闭状态(余额充值属于虚拟类充值 不需要收货地址信息)。启用支付场景:开启。超时关闭订单:超过10分钟自动关闭订单。开启订单备注:关闭状态(虚拟商品不需要进行支付备注)。平台扣除手续费:0%,余额充值不需要进行账户结算。
    5、前端新增统一支付下单钩子事件(创建生成支付订单,并非发起支付请求)xc_hook_payment_order($data),data是个数组结构,从当前页面提取一些元素信息,可能包含的内容有【title:商品标题、type:支付场景、shop_type:商品来源、shop_order:商品编号、amount:支付金额价格、user_id:创建支付订单的用户、seller、收款方、meta:备注订单信息】,其中title、type、amount三个字段为必须,不可缺失。
    6、前端支付订单生成钩子优化,需要主动传递的变量data移除,改为type变量。该变量为支付场景,创建支付订单请求仅需要传递支付场景一个参数即可。根据支付场景来决定支付订单数据的封装,订单数据直接在函数内部来完成处理。函数触发后会通过let初始化一个payment空对象,所需要的支付数据通过赋值这个对象来完成,比如支付场景payment.type。注:这样的处理,整个订单生成事件会变得更灵活,可以根据支付场景来做不同的前端安全检查。
    7、支付订单创建钩子已完成余额充值(recharge_money)的封装处理,通过xc_hook_payment_order传递的是余额支付请求,会依次执行以下检测。1、检测用户是否登录,通过xc.is_login来完成,未登录直接调用xc_login进入支付页面。2、检测页面是否包含元素(.recharge_money-content)如果不包含则说明用户未处于余额支付页面,返回(非法请求)。3、通过页面来获取xc_money_recharge_imput表单数字(充值金额),如果获取不到或者获取的非数字则返回错误:失败:请输入有效的充值金额'。
    8、余额支付页面新增BTN按钮(立即充值),绑定事件:xc_hook_payment_order('recharge_money')。该按钮追加单独类名(recharge_money)用户点击后将会触发订单生成钩子请求,并从页面中提取本次的支付金额,保存到payment对象中。然后调用xc_loading_show进行页面加载提示,并触发ajax请求(xc_hook_payment_order)到后端进行业务逻辑的处理。注:同时额外增加一个拦截事件,判断元素【.xc_setting_btn.recharge_money'】是否存在,如果不存在则拦截并返回失败:非法请求。
    9、后端接口新增【支付订单生成】请求,当用户需要进行支付订单的生成的时候,会通过ajax1触发该接口。服务端收到请求后首先会通过empty检测是否传递payment对象,如果传递了则继续检测是否为数组。如果不是则返回错误【失败:订单数据不完整】。然后根据支付场景来进行不同的业务封装,如果是余额充值:recharge_money则会检测amount是否存在,如果存在则通过is_numeric检测是否为数字。如果返回false则返回错误【失败:订单金额错误】。然后封装title支付商品标题:账户余额充值,同时将支付金额进行floatval浮点数处理,将其转为标准数字。然后调用add_payment_order_hook接口来进行订单生成,无论是否创建成功,将结果如实返回到前端。
    10、统一支付页面现在会回展示【支付备注信息】,每个支付场景都可以在后台设置一个支付场景描述说明,该字段支持短代码、html,可以根据实际支付场景来填写写一些付款提示信息。页面会过empty来检测字段是否为空,如果不为空则会通过do_shortcode来输出该内容提示。同时为了避免样式冲突,该容器会赋予一个类名{payment_desc},需要做演示处理,通过这个父级类名来处理即可。
    11、支付场景配置新增一个字段【delete】,是否主动删除已过期的支付订单(创建订单后超时未进行付款)。开启后,支付订单超时未支付会被系统任务进行删除。虚拟类订单(充值余额、充值积分、认证、资源包)类型建议开启,实物付款的订单则建议关闭(保留付款记录)。注:如果开启的了删除,过期后不是将订单状态标记关闭,而是直接移除记录。
    12、增加一个倒计时回调通知钩子;xc_hook_countdown,当倒计时结束后会触发这个钩子。会主动传递id,计时器的编号,也可以理解为倒计ID编号。钩子触发后会检测用户是否处于统一支付页面,如果处于的话则获取统一支付页面的倒计时ID,并于传递的ID进行对比,如果一致则锁定元素【xc_setting_btn.payment_method】支付菜单按钮,执行以下动作。1、将按钮文字变更为:订单已关闭。2、将onclick点击事件移除,防止继续支付。3、将背景颜色变更为黑色,提醒用户无法支付。
    13、前端新增统一支付钩子:xc_hook_payment(token),token是支付编号凭证(前后端通讯需要通过这个凭证来验证用户的合法性)。支付后会验证用户是否处于支付页面,如果不处于则阻止执行并返回错误。如果处于支付页面则封装一个作用域变量payment,将token令牌、付款方式method等内容提取并存储其中,然后执行ajax请求到后端进行业务处理。
    14、统一支付页面移除自定义属性ID(支付订单数据表主键ID,订单支付的ID泄露存在风险问题。防止用户非常规手段来进行订单回调),前后端的通讯只能通过Token来进行交互,该令牌采用MD5混合加密,需要后端进行解析才能获取到ID值。同时method支付方式的值通过选择器来提取,元素位置为【.unified_payment_content .payment_method li.on】。提交后端前会验证Token和method是否有效,如果获取失败则返回错误提示。

  • 0
    小小乐lv.2实名用户
    2024年6月23日
    1、支付SDK新增日志功能,如果支付过程中发生致命性的错误将会记录错误信息到【/www/wwwroot/www.acocoa.com/payment.log】,日志保存天数为30天,超过会自动清理。注:该日志于支付日志报警不想关,这里会记录详细的设备信息,以及接口返回的错误。方便运维人员进行深度排查定位问题所在,之前的支付日志是为了报警通知,错误没有这边详细。
    2、通过xc_payment_sdk_hook发起微信支付请求时,会使用 try-catch 语句来捕获InvalidResponseException异常,这样微信接口发生报错的时候,能及时返回错误码,并写入到日志中。同时如果出现其他问题(SDK主动捕获到的异常)会通过Exception来监听错误。注:一个是服务商请求出现异常,一个是SDK请求出现异常。均会通过$e->getMessage()来记录原因。
    3、无论是支付宝还是微信支付,在调用统一支付SDK时 以下三个场景会触发入日志报警事件,并返回错误给前端处理。1、返回结果不是预期,支付服务商必须的字段不存在,触发报警日志。比如微信H5支付事件($response['h5_url'])不存在视为错误,主动将其拦截处理。2、Yansongda\Pay\Exception\InvalidResponseException错误监听触发时,返回服务商请求出现异常(' . $e->getMessage() . ')。3、\Exception 通用错误监听触发返回支付失败:SDK请求出现异常(' . $e->getMessage() . ')。上述三种情况都会写入对应的错误到日志中。
    4、考虑到支付服务商返回数据包各不相同(即便是同一个支付服务商,也会支付场景的不同返回不同的数据包)比如:微信支付,H5默认返回的是一个链接。公众号支付则返回wxsdk所需要的两个支付参数。为了确保前端业务可以更有效的处理,通过xc_payment_sdk_hook成功获取到数据包后,返回前端时会额外追加两个字段【method:支付方式(wxpay/alipay)、environment:支付场景方式(/h5/app/wechat(微信浏览器)/miniprogram(微信小程序))】通过解析这两个返回,来进行数据包的处理。
    5、微信统一支付请求-H5付款的SDK请求已完成封装,必须的字段参数为:out_trade_no(商户单号)通过全局同名变量获取。description:(支付商品标题)通过全局变量subject获取。total(支付金额,单位为分)通过全局变量total_amount*100来获取。payer_client_ip(获取当前支付客户端IP信息)type:标记为WAP。调用Pay::wechat()->h5($order)接口来发起微信H5的支付请求。
    6、统一支付SDK已集成微信APP的支付请求,如果请求值method == 'wxpay'并且is_app为TRUE,则视为APP环境支付。此时会执行【\Yansongda\Pay\Pay::wechat()->app($order);】APP支付请求,如果请求成功则会返回json格式,供后续APP调用。注:微信APP目前宫论项目还未扩展,因此无法进行测试。但是接口先做集成。以便后续一键部署。
    7、通过统一支付进行微信APP支付请求时,如果返回的对象不是json对象,不包含APP所需要的支付字段 则视为支付发起失败。返回code=1,msg【支付失败:SDK接口发生异常(联系管理员处理)】。除了返回结果做监听,还会通过try-catch来监听支付服务商请求出现异常、SDK请求解析出现异常的两种错误。并且都会通过xc_log_error_warn来创建日志,并触发对应的报警提醒。
    8、当用户进行支付请求时如果出现返回异常(包括请求、SDK、服务商)错误都会触发报警和日志写入,之前只记录了method:支付类型的写入,但是每种支付类型都有不同环境,比如H5支付、APP支付、小程序支付。不同的支付所请求的接口和返回体各不相同。因此需要单独记录。这样遇到支付问题,可以更快速有效的进行排查处理。因此所有的支付日志写入都会有支付场景的注明。示例:【支付场景:h5】。
    9、通过xc_payment_hook进行支付请求时,如果请求的来源是微信浏览器(通过xc_is_weixin来验证)那么将通过get_user_meta来读取当前用户的自定义字段【weixin_uid】如果获取失败则返回错误提示:支付失败:微信支付需要提供openid。并阻止用户支付请求。注:微信公众号和小程序都需要提供关联openid,如果用户未登录则无法完成支付请求效验。
    10、统一支付SDK已完成(mp:公众号支付)的封装处理,必须的字段参数为:out_trade_no(商户单号)通过全局同名变量获取。description:(支付商品标题)通过全局变量subject获取。total(支付金额,单位为分)通过全局变量total_amount*100来获取。openid:用户公众号openid。如果用户未登录或openid获取失败则会返回【支付失败:公众号支付需要提供openid】完成上述变量获取后,会执行\Yansongda\Pay\Pay::wechat()->mp($order)方法来获取支付数据,并将其保存到【response】并返回前端中。注:response是个数组返回,会返回(appId、timeStamp、nonceStr、package、signType、paySign)。前端wxsdk需要上述参数来调用微信支付。
    11、统一支付目前已集成的支付类型有1、Alipay(支付宝H5付款:返回支付表单数据,直接在页面执行会跳转到支付页面、支付宝APP付款:返回一串字符串以app_id作为起始开头,app端通过这个字符来调用支付宝进行支付请求)2、wxpay(微信H5付款:返回支付的连接,前端进行页面跳转来进行支付。APP付款:返回状态不明,暂未集成。公众号付款:返回一个数组,包含了nonceStr、package等支付凭证,通过微信SDK来调用内部支付)
    12、考虑到未来有些场景需要用到扫码支付,为了避免以后再二次集成。统一支付SDK接口新增支付宝和微信的扫码支付请求【支付标识:scan】通过method来判断用户请求是支付宝付款,还是微信付款。然后调用SDK请求对应的支付接口。【支付宝:Pay::alipay()->scan、微信:Pay::wechat()->scan($order);】如果请求成功则会返回对应的付款二维码地址。需要传递商户单号、支付商品标题、金额(微信是分作为整数单位)。如果请求出现异常则会通过try-catch进行错误捕获,并写入日志。
    13、当用户通过页面选择支付方式后,后端在完成安全拦截后,并成功通过SDK获取到了支付数据包后。会返回以下内容过去。1、code:状态为0,代表后端支付请求构建完成。2、msg:返回固定字符(支付数据包完成封装)。3、method:本次的支付选择(固定为:alipay、wxpay、money)。4、environment:设备环境信息(app、h5、wechat、miniprogram)。5、payment_order:商户唯一单号(每次调用SDK这个单号都会有变化,防止重复支付出现问题)。6、response:支付凭证信息(这个参数是根据支付的类型来决定返回内容,需要参考开发文档来做处理。有的是返回链接,有的是返回数组,有的是返回加密字符)
    14、支付请求SDK钩子:xc_payment_sdk_hook新增一个拦截处理,成功通过wpdb获取到支付订单数据表信息后,如果支付请求方式为money(余额支付)则会阻止付款请求,直接返回错误提示【支付失败:SDK接口不支持余额支付】防止用户通过SDK来执行余额支付请求,目前统一SDK仅支持微信、支付宝、银联三种付款请求,余额支付涉及到账户资金安全,执行的业务标准和逻辑与第三方支付没有任何关联,因此需要做出一个拦截方法。
  • 0
    小小乐lv.2实名用户
    2024年6月21日
    1、宫论后台新增日志报警监听:日志唯一标识(payment)日志说明(【支付功能】接口出现异常),如果当天累计出现10次支付错误,则会触发报警通知管理员。每日报警次数设定为3(避免因为接口异常出现大量重复警告)。短信报警功能(开启状态),支付接口出现故障是属于高危风险,需要全方位的通知(短信通知、邮件通知、公众号通知、站内信通知)。支付错误的类型有很多,具体要看日志做出分析,
    2、通过xc_payment_sdk_hook发起支付数据请求,现在回通过try-catch来捕获错误异常,如果在调用SDK时发生错误,或者请求支付平台过程中发生错误都会触发日志报警。日志写入格式【[时间 - ' . date("Y-m-d H:i:s") . '] [返回错误 - ' . $e->getMessage() . '] [支付类型 - ' . $method . '] [操作用户 - ' . $user_id . ']】记录事件、错误信息、支付类型、操作用户信息。
    3、SDK目前已集成了支付宝H5/app两个支付,通过xc_payment_sdk_hook发起支付请求时,如果method是alipay 则会通过xc_is_h5方法检测用户环境是否处于H5 如果处于则调用\Yansongda\Pay\Pay::alipay()->h5来执行支付SDK请求,成功返回response。失败则返回对应错误。如果不是H5则会通过xc_is_app方法来检测用户是否处于APP,如果处于则调用 \Yansongda\Pay\Pay::alipay()->app来发起APP支付SDK的请求处理,成功返回response。
    4、xc_payment_sdk_hook如果返回code=0,则代表支付数据包已完成封装。前端将执行支付请求。为了保证支付的安全可靠性,这里会加入一个锁单设计。锁单标识为Payments_id,有效期为20秒。如果取锁失败则会返回支付失败:订单已被锁定支付中!<br>为了防止重复支付,订单生成后会有20秒的保护期。这个锁单保护主要防止出现,当用户完成支付后,因为回调处理存在一个延迟问题。在这期间如果用户对支付订单发起二次支付,会造成订单异常的问题(改变了商户订单号,导致回调失败)。
    5、xc_payment_sdk_hook集成微信H5的支付处理,如果传递的method是【wxpay】并且环境是H5(通过xc_is_h5)检查,那么将通过\Yansongda\Pay\Pay::wechat()->h5($order)发起SDK支付数据包获取,如果获取失败则通过try-catch来捕获错误,并将错误信息写入到日志,如果成功捕获到结果,则将其存储到response,然后返回code=0.
    6、后台新增微信支付配置字段:xc_paymen_wxpay_mchid:微信商户ID信息。xc_paymen_wxpay_key_v2:v2商户私钥(选填)。xc_paymen_wxpay_key_v3:v3商户私钥(必填)。xc_paymen_wxpay_secret_cert:商户私钥-API证书(必填)。xc_paymen_wxpay_cert_path:商户公钥-API证书(必填)。xc_paymen_wxpay_notify_url:微信回调url(必填)。xc_paymen_wxpay_mp_app_id:公众号 的 app_id(选填)。xc_paymen_wxpay_mp_app_id:公众号 的 app_id(选填)。xc_paymen_wxpay_mini_app_id:小程序 的 app_id(选填)。xc_paymen_wxpay_app_id:app 的 app_id(选填)xc_paymen_wxpay_sdk_cert:微信平台公钥证书CRT(必填-接口生成)。xc_paymen_wxpay_sdk_serial:微信公钥序列号(必填)。
    7、xc_payment_config_hook获取支付配置的钩子事件进行优化处理,有关微信wechat支付SDK所需要的秘钥、证书、参数、令牌等内容全部重新进行调整。摒弃旧版的字段。全部使用新版定义的字段参数。注:之前旧版的存在命名不规范,导致字段内容有些定义错误。间接的造成整个支付出现异常返回,因此需要进行配置重构处理。
    8、通过超级管理员身份登录微信商户后台,重新生成【v2商户私钥(旧版支付接口需要,32位随机字符串)、v3 商户秘钥(微信新版支付接口需要,包括转账、退款、订单查询都需要改秘钥,32位随机字符串)】同时微信支付账户的商户公钥证书、商户私钥证书,全部重新停用处理,通过工具重新生成一份。注:微信支付存在异常,这次集成统一支付接口,因此做全部调整处理。
    9、新增目录【global/pay/cert/】用于存放支付证书文件(包括公钥证书、秘钥证书、API证书)等内容,微信支付的证书文件、支付宝的证书文件、银联的支付文件都存放到这个文件夹。注:证书文件涉及到安全问题,无论是什么证书都要采用32位字符随机生成来命名。示例:3DVMtuFbFDTZK9uUSLfA2zfbi0sA8pJQ_apiclient_key,避免文件出现泄露的风险。
    10、通过统一支付SDK完成微信平台公钥证书的创建和生成,该证书是微信V3接口必备的核心,当请求给微信支付服务器时,微信支付接收到请求会作出响应,系统在接收到响应后,需要验证这个响应是不是微信支付服务器官方发出的,以防止欺诈,这个验证的动作,就会使用到微信平台公钥证书。
  • 查看全文
  • 查看作者
  • 文章测试

    江西·萍乡
  • 4
  • 54
  • 0
  • 7.52w
  • 咸鱼梦想小可鸭鸭小小乐学藏官方

    请登录之后再进行评论

    登录
  • 0
    欣然lv.1
    最低多少钱?最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    测试看看最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    内容测试出
  • 查看全文
  • 查看作者
  • 鉴定师入驻协议

    欢迎使用宫论APP鉴定师入驻申请功能,本协议主要阐述您申请成为相关领域鉴定师的相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于鉴定师入驻。所有规则为本协议不可分割的一部分,与协议正文具有同...
  • 学藏官方 学藏官方
  • 3
  • 50
  • 747
  • 官网公告
  • 2023-03-20 09:21 电脑端
  • 查看全文
  • 查看作者
  • 宫论藏品寄售协议

    欢迎使用宫论APP藏品寄售申请功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于藏品回收的规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效...
  • 学藏官方 学藏官方
  • 1
  • 1
  • 984
  • 官网公告
  • 2023-03-17 08:58 电脑端
  • 查看全文
  • 查看作者
  • 藏品回收申请协议

    欢迎使用宫论APP藏品回收功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于藏品回收的规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。...
  • 学藏官方 学藏官方
  • 1
  • 1
  • 859
  • 官网公告
  • 2023-03-13 09:29 电脑端
  • 查看全文
  • 查看作者
  • 宫论藏品鉴定协议

    欢迎使用宫论APP鉴赏功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的各类规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。 2...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 841
  • 官网公告
  • 2023-03-11 15:17 电脑端
  • 查看全文
  • 查看作者
  • 淘货发布协议

    淘货发布协议在宫论APP为了能够约束好每个卖家发布商品,也制定了统一的商品发布规范,如果各位也想要开淘宝店铺,那就需要好好去了解一下宫论APP商品的发布规范。第一章 概述第一条【适用范围】适用于在宫论APP发布商品的卖家。第二条【效力级别】本规范已有规定的,适...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 857
  • 官网公告
  • 2023-03-09 15:33 电脑端
  • 查看全文
  • 查看作者
  • 宫论提现协议

    宫论提现协议 《宫论钱包提现协议》(以下简称“本协议”)适用于所有在宫论平台进行提现的用户(以下或称“您”)。本协议被视为《宫论用户服务条款》的补充协议,是其不可分割的组成部分,与其构成统一整体。本协议与《宫论用户服务条款》内容存在冲突的,以本协议为...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 912
  • 官网公告
  • 2023-03-09 11:44 电脑端
  • 查看全文
  • 查看作者
  • 消费者保障服务协议

    本协议由您与济南谋佐科技有限公司共同缔结,本协议具有合同效力。本协议中协议双方合称协议方,济南谋佐科技公司在本协议中亦称为“宫论”。一、协议内容及生效1、本协议内容包括协议正文及所有宫论已经发布或后续发布的相关的规则与协议。前述规则与协议为本协议不可分割的组成...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 757
  • 官网公告
  • 2023-02-25 20:27 电脑端
  • 查看全文
  • 查看作者
  • 店铺保证金协议

    一、什么是店铺保证金?店铺保证金是如果涉及理赔、违规处罚等情况时,可利用店铺保证金进行支付;如没有前述情况,店铺保证金可全额退回的一种机制。二、为什么要缴纳店铺保证金?(1)重点强调-店铺无违规情况认证有效期内且缴纳店铺保证金后下个整点,可搜索到店铺,若未缴纳...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 832
  • 官网公告
  • 2023-02-25 20:20 电脑端
  • 查看全文
  • 查看作者
  • 宫论特殊类目经营资质

    尊敬的宫论商家:为了保障宫论类目健康、提升交易体验、维护商家及买家利益,现对于以下类目入驻认证需提供对应资质:类目店铺类型需要资质陨石骨牙-骨石企业/个人①与平台店铺认证主体信息一致的水野生保护动物经营利用许可证及副本(如许可证上未列举所有可经营物种明细的需额...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 719
  • 官网公告
  • 2023-02-25 20:16 电脑端
  • 单栏布局 列表样式:矩状 侧栏位置: