- 海外应用是否需要网站备案?
因为根据互联网信息服务管理办法的规定,只要在境内从事互联网信息服务活动,都需要备案,没备案不支持接入。
07-29 - ICP备案申请指南
根据工信部管理规定,对经营性互联网信息服务实行许可制度;对非经营性互联网信息服务实行备案制度。未取得许可或者未履行备案手续的,不得从事互联网信息服务。 如你的网站没有申请过ICP备案,根据国家相关规定,可能会对网站的解析产生影响,建议尽快到所在省市的通信管理局完成ICP备案。 【申请地址】请点击这里 温馨提示: 若是点击无法跳转,请复制链接"https://beian.miit.gov.cn/#/Integrated/index“更换其他浏览器打开 【申请流程】 一、ICP信息报备流程图: [图片] 二、ICP信息报备流程: 1.网站主办者登陆接入服务商企业侧系统 网站主办者进行网站备案时可有三种供选择的登录方式: 方式一:网站主办者登录部级系统,通过主页面“自行备案导航”栏目获取为您网站提供接入服务的企业名单(只能选择一个接入服务商),并进入企业侧备案系统办理网站备案业务。 [图片] 方式二:网站主办者登录住所所在地省局系统,通过主页面“自行备案导航”栏目获取为您网站提供接入服务的企业名单(只能选择一个接入服务商),并进入企业侧备案系统办理网站备案业务。 登录部级系统,并找到你所在的省局系统点击办理: [图片] 方式三:网站主办者直接登录到接入服务商企业侧系统。请联系你的接入服务商。 2.网站主办者登陆接入服务商企业系统自主报备信息或由接入服务商代为提交信息: 网站主办者通过三种登录方式(详见1)登录到企业侧系统,注册用户->填写备案信息->接入服务商校验所填信息,反馈网站主办者。 网站主办者委托接入服务商代为报备网站的全部备案信息并核实信息真伪->接入服务商核实备案信息->将备案信息提交到省管局系统。 3.接入服务商核实备案信息流程: 接入服务商对网站主办者提交的备案信息进行当面核验:当面采集网站负责人照片;依据网站主办者证件信息核验提交至接入服务商系统的备案信息;填写《网站备案信息真实性核验单》。如果备案信息无误,接入服务商提交给省管局审核;如果信息有误,接入者在备注栏中注明错误信息提示后退回给网站主办者进行修改。 4.网站主办者所在省通信管理局审核备案信息流程: 网站主办者所在地省管局对备案信息进行审核,审核不通过,则退回企业侧系统由接入服务商修改;审核通过,生成的备案号、备案密码(并发往网站主办者邮箱)和备案信息上传至部级系统,并同时下发到企业侧 1.什么是经营性的互联网信息服务?什么是非经营性互联网信息服务? 根据《国务院互联网信息服务管理办法》(国务院292号令)的第三条规定,“经营性互联网信息服务”是指通过互联网向上网用户有偿提供信息或者网页制作等服务活动。“非经营性互联网信息服务”是指通过互联网向上网用户无偿提供具有公开性、共享性信息的服务活动。 2.如何修改备案信息? 根据现有流程,用户在提交网站备案信息后,可通过接入服务商的企业备案系统修改信息,或者由其接入服务商代为修改,其目的在于强化接入服务商的代备案责任,减轻网站主办者自行备案负担。具体可咨询您的接入服务商。 3.在提交新备案信息时,系统提示主体冲突如何处理? 备案系统对主体的要求必须唯一性,即一个主体只能有一个备案号。判断主体冲突,并不是以主办单位名称为标准,而是依据“主办单位证件类型+证件号码”来判断主体是否唯一的。如果提示主体冲突,就说明该证件号码已经在备案库中存在了。您可以通过备案系统公共查询来查主体证件号码是否已经备案过。如果您要注销该主体冲突,请联系备案号发放地通信管理局,按要求提交相应的证明材料后才可进行注销。 4.在提交新备案信息时,系统提示域名冲突如何处理? 如果您在备案过程中发现您的域名先前已经被别人备案过了,可能是因为您以前已经备案过或者在您注册域名前有人购买过该域名并进行了备案。您还可以在备案网站公共查询中查询该域名的备案地(备案号第一个字是省份的简称),并联系该地通信管理局申请网站注销,按要求提交相应的证明材料后才可进行注销。 5.备案密码忘记了怎么办? 方法一:您可以通过备案系统找回。登陆https://beian.miit.gov.cn/#/Integrated/index,在右下角有“找回备案密码”按钮,选择主体所在省,在跳出的网页中,输入“备案/许可证号、证件类型、证件号码”,输入完成后点提交。如果信息填写正确,系统会向您当年注册的E-mail发送新备案密码。 方法二:如果您的备案信息是接入商代为备案的,您可以联系代为备案的接入商告诉您如何找回备案密码。 方法三:您也可以通过联系备案号发放地通信管理局,并按要求提供相应的证明材料后,取回备案密码。 6.在新、旧备案系统中网站备案的流程是否有差别? 升级后的网站备案管理系统实现了工业和信息化部、各通信管理局、接入服务企业三级备案管理服务模式。在原网站备案管理系统的服务功能基础上,增加了通信管理局级和接入服务企业级网站备案管理系统。网站主办者仅需向接入服务企业提交备案申请,接入服务企业核验后将备案信息提交至通信管理局备案系统,通信管理局进行审核,审核通过后生成备案号发给网站主办者和接入服务企业。 7.网站涉及哪些信息内容应办理前置审批手续? 根据《互联网信息服务管理办法》(国务院292号令)第5条等有关规定,拟从事新闻、出版、教育、医疗保健、药品和医疗器械、文化、广播电影电视节目等互联网信息服务,依照法律、行政法规以及国家有关规定应经有关主管部门审核同意的,在履行备案手续时,还应向其住所所在地省通信管理局提交相关主管部门审核同意的文件。 8.备案的审核时间要多长? 根据《非经营性互联网信息服务备案管理办法》(信息产业部令33号令)第12条规定,省通信管理局在收到备案人提交的备案材料后,材料齐全的,应在二十个工作日内予以备案;材料不齐全的,不予备案,在二十个工作日内通知备案人并说明理由。首次备案的,用户备案信息须经过接入商核实后才会递送到通信管理局进行审核;备案信息修改的,备案信息最后修改日期为起始计算时间。工作日不包含法定节假日和周末。 9.我的网站只有独立的IP地址,没有域名需要办理网上备案手续吗? 需要。无论您的网站是通过域名方式访问或是通过IP地址的方式访问,只要在中华人民共和国境内提供非经营性互联网信息服务都要办理备案手续。 10.如果一个备案单位同时具有两个网站,可以将两个网站分别备案在两个相同的主体下吗? 不可以,如果两个网站的备案主体都是同一个备案单位,那么只能将两个网站备案在同一个主体下。
06-21 - 马来西亚主体,服务器海外,域名需要icp备案吗?
公司主体在马来西亚,服务器也是海外的,提交版本发布的时候域名需要icp备案吗?还是跟海外一样不需要备案
2023-09-11 - 海外版公众平台认证相关问题
1、海外认证流程是否与国内认证流程一致? 目前海外认证的流程和国内一致。 2、海外版公众号名称和国内版的能重名吗? 目前海外版与国内版一样命名唯一,暂不支持重名。 3、海外版公众号认证发票可以选择增值税发票或是普票吗? 目前海外版认证的发票统一为电子发票,开票日期以实际开票时间为准。
2020-04-23 - 海外版小程序可否使用海外版商户平台进行微信支付
您们好,我的问题是海外版小程序可否使用海外版商户平台进行微信支付,因为我打开海外版微信商户平台开发文档看到的只有以下几种场景: [图片] 所以想请问可否支持境外小程序支付?比如境外小程序以新西兰元的方式支付?如果可以请问应该怎么做?谢谢
2019-05-06 - 海外版 小程序支持些什么行业 ?
请问下海外版 小程序支持哪些行业类型 ?不支持哪些行业类型?
2018-07-30 - 海外版小程序开发文档?
海外版小程序开的流程和接口和国内的一样的吗?
2020-03-11 - 海外版小程序注册方法
目前小程序全量面向海外开放,请在注册信息登记页面选择对应的“注册国家/地区”进行注册。 注:海外主体注册小程序暂只支持企业类型注册。 [图片] [图片]
2020-07-28 - [填坑手册]小程序新版订阅消息+云开发实战与跳坑
[图片] 老版本的订阅消息在2020年1月10日就下线了,相信不少人在接入新版本订阅系统的时候,或多或少会遇到一些问题,这里智库君跟大家介绍下新版订阅的机制和不需要node/后端的情况下 独立完成功能开发。 一、新版订阅的机制 其实开发过程不难,但是要理清楚它里面的机制,智库君还是花了一些时间的,也踩了不少坑 先来看下官方介绍: [图片] 可以设置多个订阅选项 感叹号里面可以看到详情 有个默认不被选中的“总是”选项 这些就是新不同的地方,智库君在开发的时候也有很多疑问,点了“总是”再点“取消”按钮会怎样?部分选择订阅会怎样?下面为大家一一梳理 (1)部分选中 [图片] 比如现在有三个选项 A,B,C,用户**“部分选中”**返回的情况: [图片] 这里用真机调试可以看到,有个返回值状态为“reject”。 如果我们反复几点点击同一个订阅后,这些值是如何计算的呢? 举例: [图片] 从这里看出,微信系统会自动记录用户点击的次数,并且做累加记录,如果用户只允许2次发送,而开发者发送了3次,最后一次将会被拒绝。 (2)点击“总是保持以上选择,不再询问”的情况 [图片] 当用户点击“总是”之后,同一个类型的订阅将不再弹出,那如果有多个订阅选项呢? 举例 订阅AAA 三个订阅模板为 X Y Z 订阅BBB 二个订阅模板为 Y W 这时候如果“订阅AAA”按钮选择了“总是”,那么再点击“订阅BBB”按钮,将只会弹出一个选项“W”,不会有 “Y” 的模板,因为在之前 “订阅AAA” 按钮中已经包含了。 [代码]wx.requestSubscribeMessage({ tmplIds: ["MECDDOdhbC3SrQmMY5XrfqiIGbMTzpEN8Z7ScXJfcd0", "iSb2NIlNnnO60wlI-8Wx5Pe82jR7TRdwjotSXtM1-ww"], success(res) { console.log(res); } }) [代码] 显示内容仅一个选项: [图片] 这里需要注意,“总是”选项是全局有效,不区分页面,选中“总是”的 W,X,Y,Z的模板,在全局任意页面中再次调用,再次调用将不再会显示! [图片] 返回值无提示用户是否选中“总是”。 (3)用户点击“总是”后,获取状态 [图片] [代码]wx.getSetting({ withSubscriptions: true, success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.subscribeMessage": true // } console.log(res.subscriptionsSetting) // res.subscriptionsSetting = { // SYS_MSG_TYPE_INTERACTIVE: 'accept', // SYS_MSG_TYPE_RANK: 'accept', // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban', // } } }); [代码] [图片] 这里可以调用wx.getSetting方法,但是需要注意:如果用户第一次选“总是”后点击“取消”按钮或者订阅模板全部是未选中/reject的,那将获取不到状态(这里可能是BUG,期待官方未来修复)。 (4)用户点击“总是”后,让用户手动修改 前面说到用户点击“总是”后,系统将不再弹窗,但是我们可以通过**“wx.openSetting”**引导用户手动修改。 [代码]wx.openSetting({ success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } }) [代码] [图片] [图片] 当然用户自己也可以修改 [图片] 总结 【重点】选择“总是”,很多人认为就可无限发送订阅消息,这个是错误的,勾选和不勾选唯一的区别就是每次触发订阅的时候会不会弹授权窗口!!! 用户点击次数系统会自动累加,直接影响后台发送通知的次数。 用户选择“总是”后,小程序界面不再弹窗,但仍然有回调/callback。 任意订阅模板在用户选中“总是”(包括接受/拒绝2个状态)后,全局有效,就算其他订阅包含“此模板”也不再显示/弹出 当用户选择“总是”中“accept/选中/接受”的状态后,可以在wx.getSetting查询到用户是否选择“总是”。 当用户选择“总是”中“reject/未选中/拒绝”的状态后,返回值“无感知”(这里可能是BUG) 二、功能开发 使用微信自带的云开发,可以在没有node/后端开发支持下,完成整个订阅流程的开发。 (1)微信后台设置订阅模板和获取模板ID 1、打开小程序后台,找到订阅消息设置 [图片] 2、在公共模板库找模板或者自己申请新模板,建议能用现成模板用现成的,因为申请周期可能较长,且容易被拒 [图片] 3、选好模板后,点击详情 [图片] 4、查看模板内容和发送DATA的结构 [图片] 5、复制模板ID (2)配置云函数 [图片] [图片] 1、新建getOpenId云函数,用于获取用户的openID [代码]// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() return { event, openid: wxContext.OPENID, appid: wxContext.APPID, unionid: wxContext.UNIONID, } } [代码] 2、新建订阅推送通知云函数 [代码]// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() //订阅推送通知 exports.main = async (event, context) => { try { const result = await cloud.openapi.subscribeMessage.send({ touser: event.openid, //接收用户的openId page: 'pages/my/index', //订阅通知 需要跳转的页面 data: { //设置通知的内容 thing1: { value: '小程序订阅填坑' }, thing2: { value: '智库方程式' }, thing3: { value: '一起学习,一起进步' } }, templateId: '5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac' //模板id }) console.log(result) return result } catch (err) { console.log(err) return err } } [代码] 写完云函数记得右键部署下!!! (3)小程序代码部分 [代码]<!------------html -------------> <button bindtap="getOpenId" type='primary'>获取openId</button> <view class="subBtn" catch:tap="sub">订阅AAA</view> <view class="subBtn" catch:tap="send">订阅推送测试</view> <view class="subBtn" catch:tap="setting">设置“总是”后,跳转修改</view> [代码] [代码]//JS 部分 //获取用户的openid getOpenId() { wx.cloud.callFunction({ name: "getOpenId" }).then(res => { let openid = res.result.openid console.log("获取openid成功", openid) }).catch(res => { console.log("获取openid失败", res) }) }, //发送模板消息给指定的openId用户 send(openid){ wx.cloud.callFunction({ name: "sendSub", data: { openid: openid } }).then(res => { console.log("发送通知成功", res) }).catch(res => { console.log("发送通知失败", res) }); }, //消息订阅 sub: function () { wx.requestSubscribeMessage({ tmplIds: ["5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac"], success(res) { console.log("订阅授权成功:"+res); }, fail(res){ console.log("订阅授权失败:" + res); } }) }, //帮助用户跳转修改订阅状态 setting:function(){ wx.openSetting({ success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } }) }, [代码] (4)测试流程 点击发送通知后,获得这样的效果: [图片] [图片] 获得对应返回值: [图片] 当errCode为0时,即发送通知成功。 当errCode为43101,说明用户只授权了一次,但是你发送了2次,超过用户授权次数。 [图片] 三、进阶与思考 1、当你有多个订阅模板同时需要用户选择时,你可以通过以下代码记录,用户哪些选了,哪些没选。 [代码]wx.requestSubscribeMessage({ tmplIds: ["5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac", "OBB_Z10eh_Inm9p8EU6Ml_NS_mijXgTz3T07cxgKvX0","5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac"], success(res) { //console.log(res); if (res.errMsg == "requestSubscribeMessage:ok") { let acceptArray = []; //用户授权模板列表 for (let i = 0; i < tmplIds.length; i++) { const element = tmplIds[i]; if (res[element] == "accept") { acceptArray.push(element); } }; console.log(acceptArray); if (acceptArray.length > 0) { //执行下一步函数 } } } }) [代码] 2、一个关于是否需要记录用户对某个“订阅模板授权的次数”,以控制后台“发送的次数”,智库君在实战中认为,其实没有必要,顶多就是你发送返回一个错误码,微信之所有记录用户授权次数,也是为了保护用户不被骚扰。 3、你只需要记录用户点击了哪些需要授权的模板就行,为了是用户点击订阅后,改变按钮的状态,避免订阅按钮反复弹窗的问题,同时当检测到用户点错“总是”按钮后,可以自动跳转到“设置”界面。 4、这次智库君主要给大家简单介绍了下订阅全流程。后面大家可以根据自己的需要,添加和改进这些代码。比如: 配置云函数中的node函数,实现定时发送 配置云函数中的数据库,实现内容的自定义发送 最后,希望这篇文章能帮助到大家,一起学习,一起进步! (官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html) 往期回顾: [打怪升级]小程序自定义头部导航栏“完美”解决方案 [填坑手册]小程序Canvas生成海报(一) [拆弹时刻]小程序Canvas生成海报(二)
2021-09-13 - 小程序一次性订阅消息详解
简介 相对来说小程序发送通知用得更多的还是一次性订阅模版,发现社区挺多同学对一次性订阅的一些细节设定存在不少疑问。所以这里整理了一些常见的问题。 订阅框长这样,本文也围绕这个弹窗展开: [图片] 常见问题Q&A 1.获取模版ID 1.1 如何获取到合适的模版ID? 答:进入MP后台,https://mp.weixin.qq.com, 可以在【功能】->【订阅消息】->【公共模板库】选择合适的模版。选择后在【我的模版】 查看到模版ID。 注意: 不同小程序,选用同一个模版,生成的模版ID是不一样的。 [图片] 1.2 如何申请新的模版? 答:在MP后台申请,入口比较隐蔽。如要在【公共模版库】搜索任意模版,然后翻到最后一页,会出现【帮助我们完善模板库】的选项,点击进入申请新模版。比如此处我搜索了签到 [图片] 2.订阅次数 2.1 勾选了【总是保持以上选择,不再询问】,是不是就可以多次向发送通知了? 答:不能,用户没有再次点击触发订阅的按钮就不会增加订阅次数。勾选之后只是触发订阅时不再弹窗,保持上一次用户的选项进行订阅接口的调用。 2.2 用户一天内多次点击订阅后,是不是就能发送多条通知? 答: 是的,用户一天内点了N次订阅,就可以向用户发送多条通知。 2.3 用户点击订阅后,此次发通知机会的有效期是多久? 答: 永久有效。 2.4 勾选部分模版,再选择勾选 【总是保持以上选择,不再询问】,点击【确定】后,下次订阅哪几个模版的订阅次数会增加? [图片] 答: 如上图,只勾选了AB,然后保持选项点击【确定】,下次订阅时只有A,B模版的订阅次数会增加。 2.5 勾选部分模版,再选择勾选 【总是保持以上选择,不再询问】,点击【取消】后,下次订阅哪几个模版的订阅次数会增加? 答: 如果选择了【取消】+ 【保持选项】,所有订阅消息次数都不会再增加。如上图,不管是否勾选,A、B、C三个模版次数都不会增加。 2.6 勾选【总是保持以上选择,不再询问】选项后,如何修改选择? 答: 可以在小程序设置页面,配置是否接收模版消息。(小程序右上角三点按钮,可以唤起进入设置页面的面板) [图片] 2.7 为什么我设置的通知页面没有显示MP后台配置的通知模版? 答:只有勾选过【总是保持以上选择,不再询问】的模版消息才会进入这个配置页面。 2.8 关闭接口通知按钮后(上图红框内按钮),再开启,订阅次数怎么计算? 答: 关闭按钮后,所有通知都无法接收,订阅次数全部清零。所以重新开启后,也需要用户重新订阅才能再次发送通知。 3.弹窗相关 3.1 模版ABC已经勾选【保持选项】,在另一处同时订阅ADF,此时还会弹窗吗? 答: 会,但是弹窗中只会有两个模版DF,模版A不显示。 3.2 开发者勾选【总是保持以上选择,不再询问】后,怎么重新唤起弹窗? 答:微信开发者工具,清除全部缓存。重新生成二维码,测试机扫码后即可重新唤起弹窗。 Tips:登陆开发者工具的微信账号和需要重置弹窗的微信账号需要保持一致。
09-04 - 小程序订阅消息默认不选中授权?
问题1:小程序一次性订阅消息要改成默认不选中了吗? 问题2:更改后,默认不支持用户勾选总是保持以上选择选项了吗? (1)现状:默认授权 [图片] (2)目前在灰度中,默认不选中? [图片]
2023-07-06 - 「笔记」小程序备案驳回原因整理(不定期更新)
修改字段 待完善原因 修改建议 主体备案证件OR主办单位 证件 主办单位证件涉及前置或专项审批-你单位名称/经营范围/小程序名称/小程序服务内容涉及食品经营 你单位涉及食品相关内容,需要提供《食品经营许可证》、《食品生产许可证》或《仅销售预包装食品经营者备案信息采集表》请通过主体其他补充材料接口上传。 主体备案证件OR主办单位证件 主体证件图片不清晰 请上传清晰完整、不遮挡关键信息/图像、边角齐全、在有效期内的主体有效证件。 主体备案证件OR主办单位证件 主体证件边角不齐全 请上传清晰完整、不遮挡关键信息/图像、边角齐全、在有效期内的主体有效证件。 主体备案证件OR主办单位证件 主体负责人证件非原件彩色扫描件或拍照件 请上传清晰完整、不遮挡关键信息/图像、边角齐全、在有效期内的主体负责人有效证件彩色扫描件或者彩色拍照件。 主体备案证件OR主办单位证件 主办单位证件涉及前置或专项审批-你单位涉及危险化学品 经营范围涉及危化品的,需提供《危险化学品经营许可证》,如实际小程序不涉及的可提供情况说明书,并上传在小程序其他材料位置。 主体备案证件OR主办单位证件 主办单位证件涉及前置或专项审批-北京涉及金融相关关键字 你单位名称/经营范围涉及“金融”相关前置审批关键字。 注:承诺书需上传在小程序其他材料接口。 主体备案证件OR主办单位证件 主办单位证件涉及前置或专项审批-单位名称/经营范围涉及“文化”相关前置审批关键字 你单位名称/经营范围涉及“文化”相关前置审批关键字,如小程序实际经营相关内容,请提供文化和旅游厅审批的《网络文化经营许可证》,前置审批项需选择“文化”;如小程序内容不涉及,需在小程序备注中详细备注小程序从事内容,并承诺不涉及文化前置审批内容。 主体备案证件OR主办单位证件 主办单位证件涉及前置或专项审批-单位名称/经营范国涉及“药品和医疗器械”相关前置审批关键字 你单位名称/经营范围涉及“药品和医疗器械”相关前置审批关键字,如小程序实际经营相关内容,请提供食品药品监督管理局审批的《互联网药品信息服务资格证书》,前置审批项需选择“药品和医疗器械”如小程序内容不涉及,需在小程序备注中详细备注小程序从事内容,并承诺不涉及药品和医疗器械前置审批内容。 主体备案证件OR主办单位证件 主办单位证件涉及前置或专项审批-贵州涉及前置审批关键字 你单位名称、经营范围涉及前置审批关键字,如涉及请配合提供前置审批文件,如实际小程序内容不涉及需配合提供承诺书,承诺书模板下载链接:https://developers.weixin.qq.com/miniprogram/product/record_material.html 注:承诺书需上传在小程序其他材料接口。 主体备案证件OR主办单位证件 你单位名称/经营范围/小程序名称/小程序服务内容涉及食品经营 你单位涉及食品相关内容,需要提供《食品经营许可证》或《预包装食品经营许可证》,请通过主体其他补充材料接口上传。 主体备案证件OR主办单位证件 你单位涉及食品经营 管局要求如涉及食品经营需要提供食品经营许可证,请通过补充材料接口上传。 主体备案证件OR主办单位证件 备案主体涉及特殊关键字 备案主体为律师事务所的,需提供字迹清晰、页面完整的《律师事务所执业许可证》副本进行备案,上传附件应包含许可证副本首页、登记事项首页、最新年审页与变更登记名称、住所页;请通过主体其他补充材料接口传,为了保证清晰度,切勿拼图上传。 主体备案证件OR主办单位证件 备案主体涉及特殊关键字-经营范围涉及“出版”相关关键字 你单位名称/经营范围涉及“出版”相关前置审批关键字,需要提供《互联网出版物许可证》材料。 主体备案证件OR主办单位证件 湖北涉及电子商务或互联网销售 你单位名称/小程序名称/小程序服务内容/经营范围涉及电子商务或百联网销售,如实际小程序内容涉及需配合提供《增值电信业务经营许可证》如不涉及请配合提供“电子商务情况说明书”,说明下模板下载链接:https://developers.weixin.qq.com/miniprogram/product/record_material.html 注:说明书需上传在小程序其他材料接口。 主体备案证件OR主办单位证件 湖南涉及前置审批关键词-涉及出版前置审批关键字 小程序名称、服务内容不涉及前置审批,仅经营范围涉及前置审批关键字,需要备注说明小程序实际从事内容,并需要用户咨询相关前置审批部门后回复无需办理的,需按照格式注明:咨询单位(前置审批主管部门名称) ,电话***,回复无需办理前置审批。(内容主管部门、咨询电话信息,仅供参考,以实际情况为准 咨询部门:湖南省新闻出版局、省电影局 咨询电话:根据用户所在地自助查询) 主体备案证件OR主办单位证件 湖南涉及前置审批关键词-涉及教育、培训等关键字 小程序名称、服务内容不涉及前置审批,仅经营范围涉及前置审批关键字,需要备注说明小程序实际从事内容,并需要用户咨询相关前置审批部门后回复无需办理的,需按照格式注明:咨询单位(前置审批主管部门名称) ,电话***,回复无需办理前置审批。(内容主管部门、咨询电话信息,仅供参考,以实际情况为准 咨询部门:当地教育主管部门 咨询电话:根据所在地自助查询) 主体备案证件OR主办单位证件 湖南涉及前置审批关键词-涉及文化前置审批关键字 小程序名称、服务内容不涉及前置审批,仅经营范围涉及前置审批关键字,需要备注说明小程序实际从事内容,并需要用户咨询相关前警审批部门后回复无需办理的,需按照格式注明:咨询单位(前置审批主管部门名称) ,电话***,回复无需办理前置审批(内容主管部门、咨询电话信息,仅供参考,以实际情况为准。 咨询部门:湖南省文化和旅游厅咨询电话:0731-82213010) 主体备案证件OR主办单位证件 湖南涉及前置审批关键词-涉及金融前置审批关键字 小程序名称、服务内容不涉及前置审批,仅经营范围涉及前置审批关键字,需要备注说明小程序实际从事内容,并需要用户咨询相关前置审批部门后回复无需办理的,需按照格式注明:咨询****单位(前置审批主管部门名称),电话*****,回复无需办理前置审批。 (内容主管部门、咨询电话信息,仅供参考,以实际情况为准 咨询部门:当地金融局 咨询电话:根据所在地自助查询) 主体类型 主体 性质选择错误 你的主体性质选择错误.请根据你提供的证件选择正确的主体性质。 主体类型 主体性质选择错误 你的主体性质选择错误,请根据你提供的证件选择正确的主体性质。 主体补充材料 你提供的补充材料不符合要求 你提供的补充材料不符合要求,请确保你提供的补充材料清晰完整,内容与实际情况相符(包括但不限于材料内容、法人签字、盖章、写日期等信息均符合正常逻辑,且有效期不小于60天)注:如涉及到需要勾选的地方,请根据订单中实际情况勾选,不勾、错勾均不可以。 主体补充材料 补充材料上传位置错误 请将该材料上传至小程序 其他补充材料接口。 主体负责人应急联系方式 应急联系方式不符合要求-天津政企要求:一、应急联系方式需为本单位员工,二、应急联系方式需按要求备注 应急联系方式需为本单位员工,且需要在小程序备注中备注:应急联系电话手机号使用人为XXX公司员工XXX。 主体负责人有效证件类型 主体负责人信息真实性核验不通过-负责人证件号码 不能为其他主体备案过 请提供未备案过的主体负责人信息 主体负责人有效证件类型 负责人证件号码不能为其他主体备案过 请提供末备案过的主体负责人信息。 主体负责人证件 水印遮挡有效字体 或水印内容有误 请上传清晰完、不遮挡关键信息/图像边角齐全、在有效期内的主体负责人有效证件;且水印内容与小程序备案有关。 主体负责人证件 证件不能添加水印/公章 订单中的图片必须为彩色原件拍照件或彩色扫描件,请勿添加水印或公章,请修改后重新提交。 主体负责人证件 请负责人提供补充材料 请主体负责人提交在本单位缴纳至少3个月的社保证明或本行政区域内的居住证。 主办单位名称 主办单位证件涉及前置或专项审批-广东单位名称涉及金融关键字 1、请优先提供金融办等金融监管部门的批文。2、如果确认无法拿不到的金融文件的,需提供一份情况说明书,内容必须写清楚“咨询单位、部门、电话,接电人的答复和态度是什么,以及介绍公司是做什么的,并承诺不利用互联网从事金融服务,不做网贷,不做P2P”等,如果违反需承担关闭小程序、注销备案、主体进入黑名单处罚。 3、法人手写签字或签名章(尽量正楷)、盖单位公章、写日期并上传在主体其他补充材料。 主办单位名称 备案主体涉及特殊关键字-广东涉及非学科类校外培训需提供承诺书 承诺书内容需包含:1)写清楚小程序具体从事内容是什么,并承诺不涉及学科类校外培训活动等。2)单独起一段(文字不得修改):我单位/公司(按实际情况选择不能都保留)承诺末经教育部门批准不从事学科类校外培训活动,如有违背接受被注销备案、关停小程序等处理措施。3)公司落款,加盖公司公章、日期 注:承诺书需上传至小程序其他补充材料接口。 主办单位名称 备案主体涉及特殊关键字-经营范围涉及“电影、电视”关键字 经营范围涉及“电影、电视”关键字请提供《不涉及电影电视情况说明书》,并上传至小程序补充材料接口。承诺内容应包含小程序实际经营内容与用途,并承诺实际不涉及电影、电视节目、影视制作等需主管部门前置审批的相关内容;承诺书须有单位法定代表人签字,加盖公司公章,日期,方视为有效。 主办单位名称 备案主体涉及特殊关键字-经营范围涉及”金融“关键字 经营范围涉及“金融”关键字请提供《不涉及金融情况说明书》,并上传至小程序补充材料接口。承诺内容应包含: 小程序实际经营内容xxxxx与用途xxxxxx,并承诺实际不涉及互联网金融等需主管部门前置审批的相关内容:承诺书须有单位法定代表人签字 ,加盖公司公章,日期方视为有效。 主办单位名称 经营范围涉及“教育”关键字 经营范围涉及“教育”关键字请提供《不涉及教育情况说明书》,并上传至小程序补充材料接口。承诺内容应包含:小程序实际经营内容xxxxx与用途xxxxxx,并承诺实际不步及学科培训、校外培训等需主管部门前置审批的相关内容;承诺书须有单位法定代表人签字,加盖公司公章,日期,方视为有效。 主办单位名称 经营范围涉及“文化”关键字 经营范围涉及“文化”关键字如小程序涉及请配合提供前置审批文件,如不涉及请提供《不涉及文化情况说明书》,并上传至小程序补充材料接口。承诺内容应包含:小程序实际经营内容与用途,并承诺实际不涉及网络文化等需主管部门前置审批的相关内容: 承诺书须有单位法定代表人签字,加盖公司公章,日期,方视为有效。 主办单位名称 经营范围涉及”药品和医疗器械“关键字 经营范围涉及”药品和医疗器械“关键字请提供《不涉及药品和医疗器械情况说明书》,并上传至小程序补充材料接口。承诺内容应包含:小程序实际经营内容xxxxx与用途xxxxxx,并承诺实际不涉及药品、医疗器械等需主管部门前置审批的相关内容;承诺书须有单位法定代表人签字,加盖公司公章日期,方视为有效。 主办单位证件类型 主体证 件类型选择错误 请将主体证件类型修改为和主体证件一致。 主办单位通信地址 主办单位通讯地址不详细 通讯地址需精确到具体的门牌号,例如:xx省xx市xxx县xx路xx号xx号楼xx单元xx室,且不能使用特殊符号(如:2#楼2-3-301),如果已经是最详细的地址,无门牌号的,请在主体备注中说明“通信地址已为最详细”。 人脸核身 活体核验照片衣着不符合要求 请小程序负责人在纯白色背景下(如白色墙体)拍摄,注意背景无杂物、露出清晰的五官和双肩、表情自然、穿着正常应季服装等。 其他 小程序主办者冲突 小程序主办者冲突,修改建议:请核实您在核实已备案成功的信息已当前填写的备案信息否一致后在平台重新提交报备申请。 其他 身份验证未通过 请确保订单中小程序负责人的身份证必须为最新,请修改后重新提交;如确认订单中的身份证均为最新,请配合按照以下流程操作:1、下载CTID APP并使用nfc读卡方式开通网证,然后重新提交订单即可 2、重新提交后仍因此问题多次被退回的,建议咨询证件对应部门。 前置审批材料 小程序服务内容涉及前置审批-四川、广东、上海涉及视频、短剧相关前置审批 涉及视频类请提供《信息网络传播视听节目许可证》,前置审批项选择“广播电视节目”,服务类目选择“休闲娱乐-视频”,《信息网络传播视听节目许可证》上传至前置审批位置。 小程序名称 小 程序名称非纯中文 小程序名称非中文时,必须在小程序备注位置写明小程序中文名称及小程序主要服务内容,并在备注中添加“承诺遵守中华人民共和国法律法规”,填写小程序名称的中文注释。 小程序名称 小程序名称/服务内容涉及教育、校外培训等内容 如小程序内容涉及校外培训等内容必须提供对应资质:学科类培训-教育部门审批的证;文旅部门负责文化艺术类培训机构;体育部门负责体育类培训机构;科技部门负责科技类培训机构:请根据你单位涉及的培训内容,提供正确的资质文件,并上传在小程序其他补充材料接口;如小程序实际内容并不涉及,请修改小程序名称服务内容、备注等信息。 小程序名称 小程序名称不符合个人备案 要求 小程序名称涉及企业/单位/商城等非个人性质,请修改为与实际小程序业务有关的名称;如果你是企业小程序,请使用企业证件进行备案。参考指引:https://developers.weixin.qq.com/miniprogram/product/record/receord_category.html 小程序名称 小程序名称与单位名称无关 你的小程序名称与单位名称无关联或涉及其他单位,请将小程序名称修改为与本单位实际情况一致,且具有实际意义,并在小程序备注中详细描述小程序经营内容。 小程序名称 小程序名称与单位经营范围无关 按照管局要求,小程序名称需要与备案主体性质相符合,通过名称可以看出小程序的具体含义,并在小程序备注中详细描述小程序的涉及内容。 小程序名称 小程序名称与单位经营范围无关 你的小程序名称与企业经营范围无关联,请将小程序名称修改为符合企业经营范围,且具有实际意义,并在小程序备注中详细描述小程序经营内容。 小程序名称 小程序名称涉及前置审批-福建小程序名称涉及剧本杀 小程序名称或备注涉及剧本杀,请提供属地文旅部门下发的备案文件;如不涉及请修改小程序名称或备注。 小程序名称 小程序名称涉及前置审批内容 小程序名称涉及前置审批/专项审批相关关键字(新闻/金融/宗教/医疗器械/网约车/校外培训/广播电影电视节目/文化/出版等),请上传对应前置审批资质;若实际不涉及,请修改为不涉及前置审批关键字的名称。 小程序名称 小程序名称重复 同一个主体下,该App,小程序或快应用上报的名称已存在或已提交备案申请,请勿重复报备;请修改后重新提交。 小程序名称 小程序备案个数较多-备案小程序较多 请配合提供《情况说明书》,内容需包含小程序实际经营内容、承诺“遵守互联网信息服务相关法律法规和行政管理规定,按照备案项目范围提供互联网信息服务,不发布未经许可和法律法规禁止发布的信息”,并法人签字、加盖公司公章写日期,上传至小程序其他材料接口。 小程序名称 非国家级单位小程序命名不符合要求 非国家级单位,不得以中国、中华中央、人民、人大、国家等字头命名。 小程序备注 个人小程序备注不符合要求 小程序备注不符合个人性质,不能涉及企业或经营性等情况,请修改为符合个人性质的备注或删减备注。 小程序备注 四川不涉及前置审批备注要求 小程序主要从事内容为******,承诺不涉及*****等前置审批内容。 小程序备注 小程序不涉及前置审批备注要求-不涉及前置审批备注要求 请补充填写备注,格式参考:“小程序主要从事内容为*******,承诺不涉及*****等前置审批内容” (注:切勿一句话描述为公司旗下产品或公司项目等无实际意义的内容) 小程序备注 小程序名称/小程序服务内容不符合主体性质 小程序名称或小程序服务内容与你当前备案的主体性质不相符,请在备注中详细描述具体含义及小程序后期从事的内容。 小程序备注 小程序备注不符合要求 小程序备注不符合要求,请修改或删减备注。 小程序备注 小程序备注与企业性质不符合 小程序从事业务必须依照营业执照经营范围来开展,不得超范围经营(且不能照抄经营范围填写在备注中,切勿涉及烟草、危化品等不能互联网经营的业务),请详细描述小程序实际从事内容,修改后重新提交。 小程序备注 河南小程序备注 请务必清晰备注小程序实际经营内容。(注:切勿一句话描述为公司旗下产品或公司项目等无实际意义的内容) 小程序补充材料 你提供的补充材料不符合要求 你提供的补充材料不符合要求,请确保你提供的补充材料清晰完整目在有效期内。 小程序负责人姓名 小程序负责人必须为法人 根据管局要求,小程序负责人须为单位的法定代表人,请将小程序负责人信息修改为单位法定代表人的信息。 小程序负责人手机号码 小程序负责人联系方式不能为其他主体备案过 该手机号码已被其他主办单位备案使用,且与你的信息不一致,请提供小程序负责人使用的、未备案过的有效手机号码。 小程序负责人手机号码 手机号码无人接听 请在订单审核期间保持电话畅通并注意接听电话,审核员需与你电话沟通核实备案信息有关情况。 小程序负责人有效证件号码 小程序负责人证件号码不能为其他主体备案过 请提供未备案过的小程序负责人信息,建议本单位/公司具体负责小程序管理、小程序维护的相关人员。 小程序负责人有效证件号码 小程序负责人证件号码不能为其他主体备案过 请提供未备案过的小程序负责人信息,建议本单位/公司具体负责小程序管理、小程序维护的相关人员。 小程序负责人法人授权书 上海小程序负责人授权书不符合要求 请使用上海小程序负责人授权书模板,小程序负责人授权书内容填写与实际负责人信息一致,授权书内容清晰完整,并且需要法人手写签字(尽量正楷)、公章清晰完整、填写日期。授权模板下载链接:https://developers.weixin.qq.com/miniprogram/product/record_material.html 小程序负责人法人授权书 小程序负责人授权书不符合要求 请确保小程序负责人授权书内容填写与实际负责人信息致,授权书内容清晰完整,并且需要法人手写签字(尽量正楷)、公章清晰完整、填写日期。 小程序负责人法人授权书 授权书内容不符合要求-小程序负责人授权书日期不符合要求 授权书必须填写日期,且有效期不小于60天。 小程序负责人电子邮箱 小程序负责人电子邮件不能为其他主体备案过 该手机号码已被其他主办单位备案使用,且与你的信息不一致,请提供小程序负责人使用的、未备案过的电子邮件。 小程序负责人证件 小程序负责人年龄不符合要求 小程序负责人年龄不符合要求(男不大于60周岁,女不大于55周岁),请修改负责人后重新提交。 小程序负责人证件 负责人证件非最新 请确保订单中的身份证必须为最新,请修改后重新提交请上传最新的负责人有效证件。 承诺书 互联网信息服务备案承诺书不符合企业要求 按照属地管局要求,请正确填写承诺书模板信息,请法人签字,并保持正楷签字、使用备案主体公章且清晰、如实写明日期(有效期不小于60天)内容清晰完整。(注:如个体工商户和无公章,需写身份证号、按手印,并需要在主体备注“个体工商户无公章”)(承诺书模板下载链接:https://developers.weixin.qq.com/miniprogram/product/record_material.html) 服务内容类型 小程序服务内容 不符合企业性质 请修改服务内容符合企业性质,需在你单位营业范围内开展工作;参考指引:https://developers.weixin.qq.com/miniprogram/product/record/receord_category.html 服务内容类型 小程序服务内容不符合个人性质 请修改服务内容符合个人性质,或者使用企业证件进行备案;参考指引:https://developers.weixin.qq.com/miniprogram/product/record/receord_category.html 服务内容类型 小程序服务内容不符合企业性质 请修改服务内容符合企业性质需在你单位营业范围内开展工作。 服务内容类型 小程序服务内容不符合企业性质 请修改服务内容符合企业性质,需在你单位营业范围内开展工作;参考指引:https://developers.weixin.qq.com/miniprogram/product/record/receord_category.html 服务内容类型 小程序服务内容选择错误 请根据小程序实际从事内容选择正确的小程序服务内容。 法人授权书 授权书内容不符合要求-主体负责人授权书日期不符合要求 授权书必须填写日期,且有效期不小于60天。 法人授权书 授权书模板不符合要求 你提供的授权书模板不符合要求,请提供符合要求的模板,模板请参考:https://developers.weixin.qq.com/miniprogram/product/record_material.html - 小程序主办者冲突 放弃备案并重提,修改备案类型为新增小程序或无主体新增小程序。 - 其他-身份验证未通过 请确保订单中的主体负责人身份证有效期必须为最新,请修改后重新提交;如确认订单中的身份证均为最新,请配合按照以下流程操作: 1、下载CTID APP并使用nfc读卡方式开通网证,录制网证视频留存,然后重新提交订单;2、重新提交后仍因此问题多次被退回的,将视频发给前端客服,位置小程序发布流程-小程序信息/程序类目 – 查询详情 联系客服按钮。 - 单位名称或证件类型及证件号码与已备案信息不一致 你本次申请备案的主体在工信部备案系统已有备案信息,且与微信平台提交的主体证件信息(单位名称或证件类型及号码)不一致,导致工信部备案系统校验冲突。需要你返回原接入商平台核实后变更主体备案信息,确认与微信平台提交的主体证件信息(单位名称、证件类型、证件号码)保持一致后,重新在微信平台提交小程序备案申请。 - 同一主体同一时间不能有多个流程中的备案 你的主体在其他平台(或接入商)已有等待管局审核中的首次备案申请(示例:当前你的主体有网站APP或小程序正在等待管局审核中),故需要退回当前备案订单待管局审核通过获得主体备案号后,重新在微信平台提交备案申请。 - 同一主体同一时间不能有多个流程中的备案 管局系统驳回:网站主办者冲突(主办者名称或证件类型及号码),请核实后再次报备。修改意见:同一主体同一时间不能有多个流程中的备案,建议放弃当前订单,待你流程中其他订单管局审核有结果了之后,再提交当前订单。 - 备案主体冲突 订单提交失败,请核实你单位是否已取得备案号,并确认之前备案信息是否为最新,如信息不一致,请至原接入商将备案信息变更为最新信息之后,待管局审核通过,再来提交当前订单。 - 小程序主办者冲突 你的主体证件已经在其他平台备案,不能同时在微信平台提交首次备案,请核实后在平台重新提交报备申请。 - 短信核验未通过(自动驳回) 你的订单未完成工信部的短信验证,已被管局系统驳回;请重新提交订单后,在收到工信部系统下发短信验证码的24小时内,按照短信提示的流程进行短信验证。 - 系统校验备案类型错误 您单位之前备案成功过两个网站,您此次订单理应是无主体新增备案,然而您的订单是首次备案,这是系统校验错误,请重新提交订单让系统重新校验正确就好。非常不好意思,请系统又未校验正确,麻烦您再次提交。 - 身份证校验未通过 请确保订单中的身份证必须为最新,请修改后重新提交。 - 其他 根据《中华人民共和国网络安全法》中落实网络实名制要求,请提交法定代表人或者网站负责人在本单位缴纳至少3个月的的社保证明或本行政区域内居住证。 - 其他 主体负责人证件与系统信息不一致。 - 其他 主办单位名称/经营范围涉及前置审批;请核实是否从事相关互联网前置审批服务业务,如从事请出具前置审批文件,如不从事需详细备注。 - 其他 已开通网站打开为违规站,请关闭。 - 其他 请提供相应建站依据。 - 其他 调用公安身份证接口核验证件真实性未通过未通过信息为服务负责人xx:(请确定是不是最新的身份证)。 - 其他 同一个主体下,该App,小程序或快应用上报的名称已存在或已提交备案申请,请勿重复报备。 - 其他 企业名称或申报的小程序服务内容或涉及“游戏”,根据《互联网信息服务管理办法》《网络出版服务管理规定》,请如实填写服务内容并在前置审批栏上传许可文件,如不涉及,请正确选择小程序服务内容并提交小程序服务内容不涉及相关前置审批的情况说明,情况说明需加盖公章。 - 其他 单位名称、经营范围、涉及金融关键词的必须提供金融审批文件,暂时不支持写承诺书。 - 其他 主办单位通用信息地址填写的与实际不符。 - 其他 管局驳回原因:(1003)网站主办者冲突-单位名称或证件类型及证件号码与已备家信息不一致,修改建议:你本次申请备案的主体在工信部备案系统已有备案信息,且与微信平台提交的主体证件信息(单位名称或证件类型及号码)不一致,导致工信部备案系统校验冲突。需要你返回原接入商平台核实后变更主体备案信息,确认与微信平台提交的主体证件信息(单位名称、证件类型、证件号码)保持一致后,重新在微信平台提交小程序备案申请。请查看原接入商中填写的主体证件类型是不是:民办非企业单位主体证件号码,注意大小写是否一致。 备注:不同地区备案要求不完全一致,排序不分先后,以上数据来源于开放社区仅供参考,如有新增驳回原因可以留言补充。
03-05 - 境外支付和境内支付的差异是什么?
1.境外商户号是否可共用境内申请的商户号?【如果不行,麻烦说明如何申请境外商户号】 2.支付方面:境外API是和境内共用一套api,只需要传不同货币?【如果不能共用,烦请告知境外api文档地址等信息】 以上,感谢平台及各位大佬指点。
2023-08-08 - 境外商户开通企业付款到零钱
微信境外商户可以开通企业付款到零钱功能吗?如果可以,是不是和境内商户一样,需要入驻90天,连续交易流水30天才可以?
2020-04-29 - 澳大利亚境外商户,支不支持【企业付款到零钱】【企业付款到银行卡】【分账】等功能
如题
2022-01-17 - 境外支付FAQ
(目录)1常见问题 2退款 3风控 4小程序 5普通支付(v2接口)6支付测试 7商户平台问题 8公众平台和开放平台问题 9营销和代金券 10结算、对账单和换汇 11服务器和IP 12回调和域名 13证书和秘钥 14文档和字段 15香港钱包和V3接口 16合单、代扣和分账 17报关 18刷脸 19小微商户 20入驻和子商户进件 1、常见问题 Q:香港商户默认结算币种为港币,需要添加其他的结算币种作为结算,请问怎么添加? A:现在香港商户都是固定必须走港币结算,如果要走美元或者其他币种得经过特批,然后产品这边开通相应的入口 Q:推荐关注配置方法? A:现在在商户平台可以直接配置推荐关注 Q:App秘钥是什么,修改App秘钥对交易有没有影响? A:App秘钥在获取openid的时候需要用到,如果有需要获取openid的交易还是会有影响的 Q:香港商户请求微信支付时对应的接口域名是什么? A:香港商户一般使用apihk.mch.weixin.qq.com。注意和境内的api.mch.weixin.qq.com的不同 Q:支付后推荐关注这个功能在国内钱包和香港钱包都能用吗? A: 跨境钱包已支持、香港钱包待支持 Q:商户权限处罚申诉方法? A:商户被处罚后,如对处罚有争议,可以进行申诉。1、 标准申诉流程:发送邮件到 weixinpay@tencent.com:邮件标题为【申诉/Appeal】+机构 MID+子商户 MID,邮件内容:提供商户注册资质文件、业务模式证明材料(门店照片(线下)、网站/app 截图(线上))、交易详情及凭证,交易详情及凭证说明:如果商户是调单后被处罚,则提交被调订单的交易详情及凭证。如果商户未被调单即处罚,则商户可以选近一个月内的任意三笔交易提供交易详情说明及交易凭证 Q:下单的时候报受理关系不存在? A:可以检查一下统一下单的sub mchid和机构号是否匹配 Q:境外公众号支付支持支付后跳转吗,需要配置什么关联的权限吗? A:支持,可以直接跳转不需要配置权限 Q:APP支付报特约子商户商户号未授权服务商的产品权限? A:需要线下授权,需要发邮件给对接的BD运营申请 Q:不能够正常检测到用户输入密码错误或者取消支付的信息,就报空指针异常了是什么原因? A:输入密码错误无法检测是商户key错了 Q:微信支付时,能设置只能用某一类的卡才能支付的吗?就是设置一个银行卡的白名单,白名单内的银行卡或卡BIN才能支付? A:这个功能没有对外, 目前对外的只有限制信用卡 Q:服务商模式支付怎么设置支付后推荐关注的公众号头像为子商户头像? A:服务商模式支付,如果统一下单传了子商户APPID,就会显示子商户绑定的公众号账户头像。如果没有传子商户APPID,默认就显示服务商绑定的公众号账户头像 Q:不同地区的付款码有什么特征和区别? A:付款码是按照code128标准,一般是18位纯数字,15开头的一般是香港地区的 其他大部分是13开头。The WeChat barcodes are constructed with 18 numbers, with the start value of 10, 11, 12, 13, 14 or 15. Barcodes with 10-14 are for the China mainland users, while barcodes with 15 are for the China Hong Kong users, who cannot use WeChat cross-border pay Q:申请绑定主体不一致的APPID(限定资格开放),这种情况说限定资格开放,哪些商户有这样的资格? A:费率千六及以上且为直连商户 公众号、小程序可以网上自助绑定,可参考以下链接:http://kf.qq.com/faq/1801116VJfua1801113QVNVz.html 其他费率或者子商户号,找运营申请 Q:刷卡支付PAYERROR原因是用户没有输入支付密码,但是用户侧为什么没有输入密码的界面? A:可能用户侧超时,导致没能拉起收银台。目前境外商户开通了卡包功能后,会成为卡包的子商户。上述情况主要会影响:在系统查单时,系统识别出它有父商户,就会带着父商户信息一起查,但实际上,大单系统里是没有这个父的,最终会导致这笔单查不出来。 解决办法:把上述两个号码列入 “不带父商户号查询”名单,就可解决 Q:APP支付输入密码的时限是多久? A:正常是2个小时 Q:怎样关闭自动提现,或者设置预留固定金额后提现? A:老资金流没有这个功能,都是前一天的交易全部自动提现。如果你想账户里留一定的金额。你也可以充值进去,因为充值的资金不会被自动提现 Q:请问下境外的appid如何能得到境内公司的微信支付授权? A:不可以绑定境内的 Q:刷卡支付用户手机的付款码的有效时间是多久呢? A:一般来说6分钟后会失效 Q:刷卡支付多久之内可以被支付? A:刷卡支付如果45s内没有支付,订单就会自动被撤销 Q:支付失效时间设置有什么规则? A:刷卡至少1分钟,其他5分钟 Q:有没有为商户公众号支付设置静态二维码的API? A:There is no such kind of direct APIs, you can generate the static qr based on a h5 page developed by you and integrate Official account payment Q:对于不同地区的商户,香港钱包和大陆钱包用户付款有什么规定呢? A:1.大陆钱包,分身份证实名用户,和非身份证(港澳回乡证,台胞证,护照)实名用户,前者可以在境内,以及任何已支持微信跨境支付的境外区域付款,后者只支持在大陆付款。2.香港钱包,都是香港实名用户,只支持在香港本地或大陆消费,其他区域都不支持。(境内商户开通香港钱包收款权限,需要找BD评估,然后找橘子申请开通) Q:商户父子授权产品权限被冻结,该如何申请恢复? A:请商户提供注册证书,说明实际业务范围,若为线上业务:请提供商户官方网址或(售卖商品链接)/APP在第三方应用市场的下载链接等;若为线下业务:请提供门店外景照片(店名、地址、悬挂于店内的注册证书需清晰可见)、店内商品陈列照片、收银台照片、第三方地图定位截图等。Please provide the merchant with the registration certificate, indicating the actual business scope. For online business, please provide the merchant's official website or (product selling link) /APP download link in the third-party application market, etc.;For offline business: please provide store location photos (store name, address, registration certificate hanging in the store should be clearly visible), store product display photos, cashier photos, third-party map location screenshots, etc. Q:查询汇率接口查到的汇率和支付页面展示的汇率是不一样的吗? A:是的,查询汇率接口返回的只是一个参考汇率,具体的汇率,还是需要以查询订单返回的汇率为准 Q:目前境外是否开放微信支付成功页面关联小程序? A:这个是需要特殊申请的,而且非常难。QA之前提供的appid是我们内部的appid,是方便你们接入刷卡支付,不适用于公众号支付 Q:服务商可以同时是子商户吗? A:不可以 Q:微信的user agent是什么? A:MicroMessenger,但user agent本身有一个风险,就是它其实并不唯一,有时候可能两个完全不相关的app可能useragent是一样的,虽然这种情况出现的几率非常非常低 Q:商户已经开通了香港钱包,双开机构商,进件的商户既可以在大陆钱包里面收单,也可以在香港钱包收单,但是实际中使用内地钱包可以成功支付,但是使用香港钱包就失败了? A:可以按照以下几点逐一检查: 1 国内商户仅直连和服务商模式下的商户支持香港钱包。 银行和机构下的子商户不支持香港钱包。 2 用户的下单接口中,传了limit_pay等参数时,且用户是香港钱包的时候,就会报这个错误,具体要看看商户的下单参数(除了limit_pay外,也有可能是合单,或者有要发票,反洗钱等特殊标记) Q:限额问题? A:通过绑定的银行卡支付的,按银行自己设定的限额为主, ——》通过绑定的银行卡支付的,根据不同用户支付的银行卡不同而不同,基本在3万元-5万元/单笔限额为主。 零钱支付限额另外有相关的文档可以参考 Q:境外可以申请渠道号吗? A:暂时还没开放 2、退款 Q:有一笔交易要退款但商戶法务不同意签退款授权书? A:每一次都要做退款授权是不可能的,退款授权一般都是机构给子商户只授权一次权限 Q:境外退款的规则是什么,退款的有效期是多久,为什么退款会被关闭了? A:主要有两个资金池,人民币池和结算币种池,T日交易资金都在前者,T+1都会到后者且不可逆,达到结算起点,就会从后者到商户银行账户。退款都用前者即未结算的人民币的资金。如果商户的未结算人民币资金一直余额不足,超过8天没钱退款就自动关闭了 Q:退款关闭之后再发起退款需要使用什么退款单号? A:需要使用新的退款单号 Q:退款使用什么汇率? A:如果是外币标价,退款用交易日汇率,那当时给商户结算多少,退款时也就扣除多少,用户当时支付了多少,也就会返回多少; 人民币标价的情况,正向结算还是用交易日汇率,负向结算用的是退款日的汇率 Q:融合商户的退款规则是什么样的? A:融合商户有三个资金池,CNY收款资金池,港币收款资金池,结算资金池,大陆用户的交易T日进CNY收款池,香港钱包的用户直接进港币收款池,T+1日全部进结算资金池。如果T+1日做退款,需要对应的收款资金池里有新进的交易资金,比如大陆人退款,就要求CNY收款池有资金,香港人退款,就要求港币收款池有资金,但是注意这里不能使用结算池的资金用作香港用户的退款 Q:境外商户支持商户平台余额退款吗? A:支持。只要有人民币资金,就可以在商户平台退款 Q:非交易日当天发起的退款,系统在什么时候发起处理? A: 如果不是交易日当天的退款,在当天中午12点以前发起的退款系统都会在中午12点后再处理 Q:境外退款的资金是用机构还是用子商户的资金来退呢? A:以机构的维度,资金池从来不会以子商户做划分,都是机构层级的 Q:Query Order API发起request时、trade_status是・NOTPAY ・CLOSED ・REVOKED ・PAYERROR时、都作为失败处理、没有再实施Revoke Order API的必要了对吗? A:所有的交易都要完成闭环,最终状态保证为close或revoke,也就是必须对刷卡订单调撤销,其他支付订单调关闭 Q:退款报交易未结算资金不足? A:退款只能使用当天商户平台的所有交易的特定该币种的订单的总资金,而且需要原路退回,用户支付的是港币退款也需要用港币 用户支付的是人民币退款也需要用人民币,你们累加一下今天商户平台该币种所有的交易的总资金看看是否满足退款所需金额 Q:申请退款报金额错误? A:可以检查一下申请退款的金额兑换为结算币种的金额后是否满足结算币种的最小单位,比如说订单金额是1CNY,退款金额是0.04,商户结算币种是AUD,0.04CNY兑换成AUD后不足0.01AUD,所以这里会报金额错误 Q:香港商户按照港币标价的订单退款的时候怎么计算汇率? A:港币标价是我们承担汇损,商户测和用户侧都是按比例退,没有汇差。需要退多少HKD订单金额,就按照比例退多少CNY给用户 Q:退款发起通知是通过什么接口配置的呢? A:这是我们默认带的服务,不需要配置 Q:由于余额不足导致的退款单关闭后,原单重试不成功怎么办? A:现在是关单时没有修改退款的幂等(商户退款单号与微信退款单号的映射)。所以部分情况下,退款关闭之后,用原来的退款单号重试是可以成功的;但是,由于余额不足导致的退款单关闭后,原单重试一定不成功。在明确退款关闭的情况下是可以更换退款单号的。通过查询订单接口确定退款已经关闭了之后,可以更换退款单号重试 3、风控 Q:你已在当前商户支付过一笔相同金额的订单,请确认是否继续支付? A:这是最近产品侧上的一个策略,重复支付提示(弹框版本) 商业支付1分钟内,同用户同商户同金额无回调和查单判断 Q:什么是疑似重复支付? A:商业支付,1分钟内 同用户同商户同金额,有回调判断 (重复支付提示:在重复支付提示的基础上,若满足无回调无查单,则出现全页面提示(否则还是弹框) 此外,预埋刷卡能力,刷卡相关报表建设OK后再规划放量) Q:同一个交易调用统一下单去分别得到qrcode,jsapi和ios/android对应的order,但是最终只会使用其中一个。这个会被当做支付成功率太低的异常支付行为来处理吗? A:同一个订单,按照不同渠道支付业务上是可以的,从订单转换率上来说肯定是有一定的影响,不过你们业务系统能够辨识并接受就可以 4、小程序 Q :小程序A获取openID,并生成支付连接,在小程序B里用这个支付连接,可以成功支付吗? A :不能实现,小程序B里一定要用自己的参数才能下单,别的小程序的参数是不能支付的 Q:小程序可以内嵌H5支付吗? A: 不可以,小程序内嵌的h5完全无法拉起支付 Q:小程序支付需要设置支付目录吗? A:不需要的,只有JSAPI支付需要设置支付目录 Q:小程序调起微信支付就闪退是什么情况? A:检查下是不是参数有问题, 可能是造成内存溢出了。小程序被封也有可能造成这个情况 Q:机构模式下小程序拉起付款码失败是什么原因? A:原因是目前还不支持机构模式 5、普通支付(V2接口) Q:境外APP支付和刷卡支付调起支付请求报系统繁忙? A:可以先检查一下统一下单中传的参数“fee_type”是否正确填写,大小写也要填对,一般只能使用大写的字母表示货币类型 Q:支付目录是如何配置的,有什么规则? A:支付目录配到二级或三级是不行的,一定要配到最后一级 支付授权目录是网站发起请求的页面所在目录,并且必须是能通过url地址访问的(与真实物理目录路径无关)。注意这个目录在注册填写时,需要精确到最细一级的且使用名称后直接加文件名,不可再增加 or 删减目录。 支付目录的设置,首先要看你支付的当前页面URL,严格区分大小写。 比如当前页面是:http://www.taidupa.com/wxpay/js_api_call.php 那么就必须填写支付授权目录为: http://www.taidupa.com/wxpay/ Q:服务商公众号支付商户没有配置支付目录,也能支付成功 ,查到服务商子商户下都没有和商户提供的支付页面url一样的支付目录,这个怎么解决? A:那可能是服务商的公众号 , 一定要配置子商户自己的 才行 (子商户的公众号支付才需要配置支付目录url 服务商的不需要配置) Q,签名错误怎么排查? A:可以按照以下几点排查: 1,参数格式大小写可能不对。 2,参数的长度也需要满足文档要求。 3,商户的key是否正确。 4,需要确认接口是否有特殊签名类型要求 Q:境外商户标价币种支持什么类型? A:支持人民币或者结算币种。每个机构号或直联商户号只能有一个结算币种 Q:APP支付报:服务商商户号未开通该产品的受理权限? A:机构模式下 子商户需要申请授权APP支付权限才行 Q:H5支付域名和JSAPI分别怎么配置,H5支付域名可以和JSAPI支付目录一样吗? A:可以相同,也可以不同,但h5支付只需要配置到域名,jsapi则是需要配置到目录 Q:支付成功返回的sub_openid与统一下单传的sub_openid不一致? A:1,传了错误的sub_openid没有报错,这个是内部历史遗留问题,后续会逐步修复 2,现阶段,商户按照文档要求,正确上传就好 3,如果商户传的字段是openid,并不是sub_openid,是强校验的 Q:APP支付报-1错误,其他原因都检查过了,还是查不出原因怎么办? A:可以使用ios调试看看,安卓的可能会有不稳定 Q:JSAPI支付QR code怎么生成? A:静态二维码需要商户基于JSAPI支付的h5页面url用随意一个生成二维码的工具或类生成 (please try to create the QR CODE based on the H5 page of the JS API payment with any tool or class on your program system.) Q:关闭订单最多可以关闭多久以前的交易呢? A:主要是未支付的订单都可以关闭 ,没严格的时间限制 Q:APP支付成功无法收到回调,改了一个回调地址就可以接收到是怎么回事? A:回调URL的设置有限制 不支持类似xxx.xxx.org.cn, 这样的三级域名。 只支持xxx.org.cn这样的二级域名 Q:境外NATIVE支付请求报系统繁忙? A:请按照以下几点检查: 1)xml格式是否正确。 2)没用的字段不传,不能传null,比如err_code_des。 3)签名出问题也会显示系统繁忙的,注意要设置完所有参数后才进行签名。 4)是否有在对应的商户平台设置扫码支付回调url Q:公众号支付报此公众号并没有这些scope的权限,错误码:10005? 你好, 请按照以几点检查:1)建议检查一下公众号的功能。比如是不是在订阅号/未认证的公众号里面尝试调用认证服务号的功能。2)微信支付认证过期或者APPID填写错误。3)请使用snsapi_userinfo的授权登录方式即可解决 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_9&index=8 6、支付测试 Q:境外支付的测试商户号是什么样的,测试商户号可以下载对账单吗? A:测试商户号是1900开头的,测试商户号不支持下载对账单,因为测试商户号没有结算功能 Q:境外的测试用户号是什么样的,有什么作用? A:测试用户号只能配合测试商户号使用 Q:小程序支付支持使用测试商户号吗? A:测试商户号不能用在小程序支付上 Q:测试的商户号账号可以登录微信支付商户平台吗? A:测试商户号不提供登录credential,无法登录商户平台 Q:测试商户号需要设置扫码支付回调url吗? A:不需要,测试商户号这个参数无效,可以不用设置 Q:这个测试商户号, 和真正的production的商户号,是不是有完全一样的支付功能权限? A:只能测试quick pay和native pay。 In-App Web-based Payment (Official Account Payment) 和 In-App Payment 不能使用。测试商户号都是多家共用的,且互不影响 Q:境外商户只有一个正式商户号,如何进行支付测试? A:可以申请一个sub_ mchid 专门用于测试 7、商户平台问题 Q:子商户的个数现在有限制吗? A:没有 Q:商户平台提示安装安全控件但是始终无法安装成功怎么办? A:You can use the Chrome browser, and do the following setting: 1:log on to: chrome://flags/#enable-nacl 2: try to find the Native Client, and change the status into Enable 8、公众平台和开放平台问题 Q:公众号文章里怎么放置公众平台外部链接? A:微信公众号文章有时候会有添加超链接的需求,这些超链接一般是公众号平台内部的链接,当然如果想要添加外部平台的链接也可以,但是会有条件限制:首先进入微信公众平台编辑页面,选中要添加超链接的文字或者图片,然后点击菜单栏中的超链接按钮; 境外的商户不支持在公众号文章中放置外部链接 Q:公众号主体支持修改吗? A:你好,账号主体不支持修改,除非符合链接中的几种特殊情况才能支持修改,http://kf.qq.com/faq/171212aAfIRb171212q2MJ7J.html 1.若符合上面链接中的特殊情况,可重新发起认证来申请修改(在认证环节提供新的主体证件等材料); 2.如果主体有工商变更证明,可在公众号后台,主体详情入口页提交材料申请纠正 Q:境外商户支持开通订阅号吗? A:不支持。根据相关政策规定,境外商户主体不支持开通订阅号相关服务 Q:已经有openid了,如何获取用户的union ID? A:可以通过授权登陆获取 Q:开放平台的app拉起小程序权限已获得,但是没有绑定选项,是怎么回事? A:这个功能调整过了,不需要app去绑定小程序。可以点详情进去看新调整后的内容 Q:一个公众号可以设置几个网络授权域名? A:目前可以设置2个 Q:公众号授权第三方如何操作? A:公众号授权第三方平台参考文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Authorization_Process_Technical_Description.html 9、营销和代金券 Q:境外可以自己创建代金券吗? A:现在境外不支持自己创建活动 Q:商户怎么发券? A:只能公众号和小程序的appid去发券,不能用app的 Q:之前接口是升级到支持单品优惠退款的V2接口了,在境外使用单品优惠和指定金额退款失败,是什么问题? A:单品优惠和指定金额退款的接口, 目前还不支持境外,需要商户切换回原来版本的退款接口 10、结算 对账单和换汇 Q:怎么查询商户未结算的人民币资金是否充足? A:只能看当天的订单的人民币总金额 Q:换汇时间? A:一般在凌晨,3-9点都可能 Q:换汇的时候人民币换成外币是四舍五入吗? A:RMB转外币,不四舍五入 [图片] Q:结算给商户时间? A:日切是0点,从0点到早上10点之间出账。具体到账时间根据结算银行的处理情况,可能会有延迟。 (满足800美金等值外币起结算点后 T+1日结算银行会处理打款给商户 日切是0点 从0点到早上10点之间出账) Q:商户平台提现手续费? A:商户平台提现无需支付手续费,交易时会按照商户申请入驻时选择的类目按笔收取手续费,类目请参考:http://kf.qq.com/faq/140225MveaUz1501077rEfqI.html Q:微信支付收费方式? A:开通微信支付商户不需要付费,但通过微信商户平台交易时,微信支付会按照商户的费率按笔收取手续费。结算时扣除相应的费率再结余下的资金,结算费率计算方式可参考:http://kf.qq.com/faq/140225MveaUz1504092YFjeM.html温馨提示:充值提现、红包、企业付款到零钱等营销功能均不收取手续费 Q:手续费扣费规则,商家得到的结算外币是如何计算的? A:结算的时候扣手续费。单笔外币结算手续费,并且进行四舍五入 Q:境外支持手动提现吗? A:境外不支持手动提现。商户需要临时暂停支付或结算功能请【<a data-miniprogram-appid="d3hmNzVjZmNiYjU0MTJkYjE1" data-miniprogram-path="cGFnZXMvc3VibWl0L3N0ZXAyL3N0ZXAyLmh0bWw/YmlsbGlkPTE3MTIyMnNlbGZxYTYzZTg0ZGZjJnNjZW5lX2lkPWtmNTQ1MyZhY3Rpb25faWQ9MTU1MzY4NDc0NDEwMDc3" href=" ">点击此处</ a>】提交资料申请,提交后请在3个工作日内留意审核结果。 商户注销请【<a data-miniprogram-appid="d3hmNzVjZmNiYjU0MTJkYjE1" data-miniprogram-path="cGFnZXMvc3VibWl0L3N0ZXAyL3N0ZXAyLmh0bWw/YmlsbGlkPTE3MTIyMnNlbGZxYTFlMDEzYjVhJnNjZW5lX2lkPWtmNTQ1NCZhY3Rpb25faWQ9MTU1MzY4NDc0NDMwMDk0" href="https://kf.qq.com/touch/bill/170622selfqa9669d101.html?action_id=155368474440018">点击此处</ a>】提交资料,注销申请提交成功,不可撤销或修改。若账户内有未结算资金,注销后会将资金结算至可用余额内,请自行登录平台手动提现。温馨提示:新资金流模式商户,暂不支持注销,可关闭支付;小微商户、服务商不支持注销 Q:微信支付可不可以把商户的营业额直接付给商户?手续费单独付给日本机构? A:没办法哦,日本地区暂不支持这种模式,这是日本合规管控要求的 没法这么操作 Q:对账单是什么时候生成的? A:10点以后陆续生成昨天的账单 Q:对账单是以appid为维度还是商户号为维度? A:以商户号为维度 Q:换汇的汇率? A:换汇使用的是交易日的汇率 Q:在23点59分以后的订单有可能出现在下一天的对账单中,即临近凌晨0点的账单有时候不出现在当天的对账单中,这种情况怎么处理? A:建议增加挂账机制 Q:下单回调失败,假如查询也没收到应答的情况怎么办? A:如果确系网络问题导致交易无法正常完成,可以选择其他方式再次支付,当前支付订单通过第二天对账后,进行处理(支付成功的退款) Q:结算是否会对机构维度进行冻结? A:结算权限不会对机构进行冻结,只会对子商户进行冻结 Q:对账单接口在机构模式下,子商户号的作用是什么? A:子商户号的作用是请求特定的子商户号的所有账单,假如不传子商户号,则返回该机构下的所有子商户的对账单 11、服务器和ip Q:服务器是否可以在外国? A:目前这么搞的就adyen一家机构,因为他们是国际gateway,然后又不想在国内去租服务器。其实这样不是很稳定,毕竟国际网络环境很复杂,网络出了问题很难定位而且没法容灾。境内现在因为就两大运营商,而且有完备的容灾体系,所以如果做境内业务,最好还是服务器部署在境内,毕竟境内业务体量要大很多,对服务稳定性要求也高很多 Q: host ip是指交易中的哪个参数? A: 不是,正常请求微信支付接口,都是通过dns解析ip来访问,可以查看下你们是否绑定了固定ip来访问的 Q:香港的接入ip什么调整? A:香港的接入ip有调整,请大家知悉。 https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh&id=74001 Q:打算做监测,判断到微信的连接是否正常,可以掌握和追踪跟微信系接连接出现的问题。用telnet的方法去测试,每隔一分钟连一下,这样做可以吗不会被判定为危险操作吧? A:可以这样做 Q:境外的进出口IP是什么? A:Hello, team, If your request domain is apihk.mch.weixin.qq.com, the entrance IP are 203.205.234.247, 203.205.254.189. And for the exit IP, they are 101.226.103.0/25,140.207.54.0/25, 103.7.30.0/25, 203.205.219.128/25, 183.3.234.0/25,58.251.80.0/25 Entrance IP means when you request our API, the IP of our API domain. Exit IP means when we request your notification url, the exit IP we used. For api.mch.weixin.qq.com and apihk.mch.weixin.qq.com, the entrance IP are different, but we cannot provide the entrance IP for api.mch.weixin.qq.com. For the exit IP, they are all the same. Q:发到apihk的请求有比较多的超时,如何查看微信支付这边的metrics是否有什么异常? A:可以帮忙执行下这个命令,看下统计数据: for i in {1..100};do curl -so /dev/null -w "DNS_lookup:%{time_namelookup}, TCP_handshake:%{time_connect}, SSL_handshake:%{time_appconnect}, TTFB:%{time_starttransfer}, Total:%{time_total}\n" "https://apihk.mch.weixin.qq.com/pay/orderquery" ;done Q:网络出现问题,请求接口耗时比较长怎么办? A:推进安装一下网络工具进行自查,安装指引:http://kf.qq.com/product/wechatpaymentmerchant.html#hid=2857 可以看一下以下指引提高安装效率: [图片] 12、回调和域名 Q:扫码支付回调链接有什么用? A:是扫码支付模式一的回调地址,模式二在统一下单里设置,模式一在商户平台设置。 境外非直连模式不支持模式一(境外的直联商户才支持模式一,但是现在已经实行断直联) Q:小程序的业务域名在哪里配置? A:配置的地方一样,就是小程序内加载webview时开发的页面的域名,在小程序的管理平台里配置 Q:H5支付域名如何增加? A:找对接的运营申请。(为了安全起见,商户运营场景发布功能都是要在测试环境测试无误才可以发布。 该测试网站仅用于实际运营发布前的测试环节,能否单独给开通测试域名,测试成功后关掉) Q:境外网页授权域名可以设置几个? A:境内境外都是一样,可以设置2个 Q:JSAPI支付完成后是否可以实现跳转? A:可以的,可以参考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 Q:接口地址异常可以怎么排查? A:商户可以检查一下是否绑定了host。由于网络变更,如下接入IP需要裁撤替换的通知:https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh&id=45603 Q:授权报10003redirect_uri域名与后台配置不一致? A:你好, 请仔细检查公众平台配置的网页授权域名与请求的域名是否一致。 配置域名:登录微信公众平台--设置--公众号设置--功能设置--网页授权域名;也有可能是商户对网页授权域名做了两次encode导致报错 这里encode符号的规则,1:正常一次encode冒号是%3a, /是%2f 2:如果做了两次encode前者就变成%253a,后者变成%252f Q:部分商户在2月24日的回调报文出现了异常,外币标价的订单收到的回调的cash fee和total fee数值一样,回调中的total fee显示错误,不是真实外币标价的金额? A:这个问题是是内部版本问题,当天已经做了回退,问题已经修复了 Q:微信回调通知缺少微信订单号的问题? A:这里有一些特殊规则,但不便透露,可以确认是version和sign_type字段会出现在回调中,但是是非必填字段,后续我们在文档里更新一下 Q:微信回调中的通知id对同一个微信订单号是唯一的吗。对于同一笔订单,如果 重复的进行通知,这个id会变化吗? A:通知的唯一标识。x联的支付通知回调,是按微信支付单号生成的回调id,所以是不变的 Q:境外商户现在服务器在国内的是否也是建议使用apihk的那个域名呢? A:如果服务器部署在国内,就用api.mch.weixin.qq.com 13、证书和秘钥 Q:证书私钥的导出方式? A:部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供。也可以使用openssl命令来自己从p12 文件中导出 Q:已经替换了新证书,为什么API安全里还有更换服务器通讯证书的提醒? A:这只是一个提示,没有去检测商户是否有在他的服务器端成功替换旧证书 Q:如何升级证书? A:请参考文档:https://kf.qq.com/faq/180824BrQnQB180824m6v2yA.html Q:证书失效时间是什么? A:1,这里说的情况,是商户已经升级成新的证书了,已经在正常使用了,但使用后,比如说商户换了技术,遗失了新的证书,这个时候,可以在商户平台里面,点更换证书,再生成一个订书,这个时候,遗失的那个证书就会在48小时后会失效。 2,这里的情况,就是你截图中的情况,首次升级成新的版本的证书后,老的版本的API证书会在14天后失效 Q:升级为新的版本的证书后旧的证书的有效期是14天内有效是什么意思? A:申请新的证书后,商户就有两个证书了。从安全角度讲,旧的那个就没有存在得意义了。但从业务连续性讲,我们又不能将旧的证书立即作废。因此我们采用的是限制旧的API证书的有效期 Q:那证书序列号在哪里查看? A:在证书文件,apiclient_cert.pem, 用软件工具进行获取。https://myssl.com/cert_decode.html Q:升级证书时显示商户名称和登录账户不一致? A:商户那边商户名称是从商户平台复制过去的,但是平台上的复制功能只是从网页前端取得,而非从我们后台记录的商户名称取值,我们后台记录的商户实际的名称多了一个空格,所以商户在填写名称的时候报名称和登录账号不符合的错误。后续后台在比较时,连续的空白符压缩成一个空格来比较,以解决空格不匹配的错误,现在已经在优化进程中,会发版本来兼容这种问题 Q:证书验证出错? A:检查商户证书是否匹配或者已经失效 Q:使用证书工具安装证书失败,在第二部的把证书工具中的请求串复制到商户平台后,从商户平台切换到证书工具中点击next的时候,返回:“Error, please copy the correct certificate to the clipboard”? A:检查是否从商户平台把正确的请求串信息复制到了剪切板中 Q:当商户只有自签证书的时候,续期证书的方法是什么样的? A:只有自签证书的情况下,需要做更换。境外的一开始就没有自签证书,申请后让他继续申请CA证书,申请后要部署到他的服务器上面去,替换掉旧的证书 Q:证书还有好多天才到期,在平台点击续期之后,是否需要导出新证书并替换到服务器上? A:不需要,这种只需要在商户平台点击一下续期即可。可以参考文档:https://kf.qq.com/faq/161222nEB7b6161222ArMNFR.html Q:商户原来更新证书的时候没有注意保存证书文件,现在需要重新下载更新的证书,现在不用原来的电脑设备,用wxcertutil工具可以重新获取证书吗? A:可以的。 用这个链接也可以下载 https://wx.gtimg.com/mch/files/WXCertUtilEn.exe 14、文档和字段 Q:什么情况下会返回NOT ENOUGH的错误码?什么情况下返回trade error的错误码? A:如果用户是银行卡余额不足会返回Notenough; 返回trade error则是这里这种情况确实是用户没有可用的支付方式,但是这个不仅仅包括余额不足这一种情况 Q:1.7版本的文档什么时候上线的? A:更新日期2019年10月底。目前的线上文档和1.7版本是一样的 Q:使用了优惠券后,返回的cash_fee金额与total_fee有差异,报关的时候商品的价格传多少呢? A:现在建议您通过汇率和total_fee去计算哈 15、香港钱包和v3接口 Q:V3 支付成功后回调解密报文出现这个javax.crypto.AEADBadTagException: Tag mismatch!,是什么原因? A:商户回调解密key配置错误 Q:融合商户的对账单人民币港币账单展示的情况是什么样的? A:存量升级的账单2种标价的对账单和新接入的香港钱包商户的对账单都是合在一起的,都只展示港币,另外如果用户是用人民币支付的,在cash_fee字段中可以看到用户实际支付的人民币金额。新接入的香港钱包商户fee_type 标价参数都是HKD,新接入的香港钱包商户判断是否是港人用户只能看bank_type类型字段 Q:v3接口返回“PARAM_ERROR”错误,message提示header缺少微信支付平台证书序列号? A:根据错误提示,这边请求头没有进行加入平台证书的序列号,这边需要在请求头中加入wechatpay-serial参数,具体序列号的值,可以进行请求平台证书接口获取。境外的退款资金来源是待结算,而不是余额。境外的资金体系里没有余额 Q:香港钱包商户号(32开头的),交易出现 invalid appid的报错怎么解决? A:如果是纯香港钱包问题需要找一下商户对接的fit的同学查看 Q:融合商户怎么区分用户钱包是什么钱包? A:根据账单里的bank_type区分 Q:如何申请香港钱包新商户? A:申请香港融合钱包新商户账户的申请地址 https://pay.weixin.qq.com/public/wechatpay/apply_guide Q:v2的商户设置了apiv3秘钥,对v2接口的微信支付有没有影响 A:没有影响 Q:查询订单接口验证签名串是什么样的? A:待签证参数: GET /hk/v3/transactions/out-trade-no/12345678901234567?sp_mchid=104556286&sub_mchid=293024388 1560757110 1560757110128 \n Q:v3下载对账单接口验证签名规则是什么? A:按照以下格式: 时间戳\n 随机字符串\n Sha1\n \n 注意最后有2个\n Q:v2和v3版本的实时汇率是会存在差异的吗?微信V3版本接口有没有实时汇率获取API呢? A:有差异,目前v3没有汇率接口,人民币金额根据cash_fee和promotion字段内的优惠金额相加得到 Q:如何判断是否为v3接口商户? A:18年12月以后接入的,mchid和mchcode不一样的就是v3接口商户。 另外商户号和mchcode是否一致,只是用来判断该商户号是否是v3商户号,对于香港地区,如果是v3商户号,那只能使用v3接口。但香港地区老的入驻商户,商户号版本还是v2,做融合升级后,虽然商户号版本还是v2,但是内部做了特殊处理,是即可以使用v2接口也可以使用v3接口的 Q:支付一直报验证签名失败? A:情况一:如果统一下单、调起支付参数和待签名串没问题,主要就是检查证书序列号和商户私钥是否正确。可以检查一下签名原文sign_src 字段是否正确; 情况二:如果不能确定统一下单和调起支付参数是否有问题,可以通过商户的私钥生成签名,然后再利用生成的签名发起请求看看,能不能成功: :可以判断生成签名有没有用小程序的appid来生成;:可以检查调起支付参数是否正确;:记得clear一下项目缓存,有时候项目缓存可能也会导致一些问题。(signtype不影响签名,但是会导致拉起支付时存在不识别的参数值。signtype取值应为RSA,而不是SHA256withRSA。)情况三:查看商户的待签名串代码,是否换行符和报文都没有缺少 [图片] Q:v3在线文档中的wechatpay-apache-httpclient工具可以自动做应答验签吗 A:这个只是个demo,参数名都是固定的,不是适用于每个接口 [图片] 16、合单、代扣和分账 Q:国内商品和国外商品合并支付了,真正支付的时候,走的是跨境支付的接口,还是国内支付的接口呢?境外合单规则? A:合单只能走国内的商户号发起,境外商户号为被合方,但合单要求发起方合被合方的appid相同,所以境外机构模式这里还走不通 17、报关 Q:推给海关或者国检都偶尔有出现这个错误:<err_code_des><![CDATA[[132021059]您的操作已提交,请确认是否已生效? A:国检的国庆前已经暂停了,可以直接推广州总署后即可去清关 Q:报关支持什么币种? A:只支持人民币 Q:报关返回支付人与订购人不一致 但是用户反馈是一致的? A:早期存量用户预留实名为小写x,所以比对不一致,我们这边已经解决了大小写校验问题 Q: 实名信息尾数带X的报错,商户这边需要做什么,现在调用重推接口重推,然后再去清关再看看吗? A:上次报错的订单,分两种情况: 1,如商户是给我们传实名信息的话,先调用“订单附加信息提交接口 ”发修改(action_type=MODIFY)报文在微信侧比对实名一致,然后再调用重推接口重推即可 2,商户如果在昨天调用“订单附加信息提交接口”不传实名信息返回DIFFERENT的,直接调用重推接口重推即可 18、刷脸 Q:刷脸怎么申请? A:找对接的BD申请 19、小微商户 Q:小微商户的提现是什么样的,支持开通手动提现吗? A:小微都是自动提现的 20、入驻和子商户进件 Q:境内的公司需要有境外的商户号,怎么接? A:他们都要注册一个境外主体才能申请 Q:境内的服务商如何才能为境外的做停车场支付的公司接微信支付? A:需要服务商注册一个境外的主体,而且需要服务商在本地有支付牌照 Q:请问最近子商户进件接口做了什么新的变动,我们收到了一版新的报备接口? A:计划对个别地区的机构做强化进件,强化后进件子商户需要提交注册证件、门店照片、负责人的个人信息、UBO信息等。机构可以通过开放平台或API进件 Q:office_phone的长度限制是多少? A:5-25位 Q:service_phone,我这边限制的是长度5-32。 merchant_mobile_phone 手机这个字段有没有加正则校验? A:16个字符以内。contact phone字段是15位以内 Q:进件的时候的境外银行机构需要传channel id吗? A:不是必传,未来这个参数及对应的能力都可能下掉了 Q:商户平台无法进件可能是什么原因? A:有可能是商户的权限被处罚了,机构可以先查看一下自己的权限是否正常 Q:报备完成后发现除了business code外其他参数是错的,我们需不需要改,怎么改? A:建议您把其他的数据,比如商户名字,其他信息等,都修改一下就行了哈 Q:显示无法新增商户是什么原因? A:可能是这个机构的等级被降为C了 Q:当前商户需补齐相关资料后,才可进行相应的支付交易,请商户联系对接的微信支付服务商? A:要登录渠道号补齐资料,或者通过小程序进行认证。也有可能是这个原因:商户进到了“报名了激励项目的商户号”中 Q:子商户进件报签名错误? A:1、首先排查自己的商户key是否正确。(//注:key为商户平台设置的key) 2、排查完了之后,到这个网页https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=4_3 拼接请求,看是否和你代码拼接的请求是一样的
2020-11-18 - 关于小程序类目医疗-》就医服务-》需要的小程序开发者承诺函?
想问一下小程序类目医疗-》就医服务-》需要的小程序开发者承诺函要求的是开发人员的承诺函,还是企业法人的承诺函,它的具体内容应该是什么
2021-11-30 - 下载模板
公众号序开发者承诺函https://developers.weixin.qq.com/doc/offiaccount/Subscription_Messages/category.html公众号序开发者承诺函,在哪下载模板?
2023-09-18 - 如何自己解绑小程序项目成员(体验者、运营者、开发者)
打开手机搜索公众号“公众平台安全助手”; [图片][图片] 关注公众号“公众平台安全助手”选择左下角菜单“绑定查询”; [图片] 选择子菜单“微信号绑定账号”; [图片] 选择“小程序”tab,下滑找到作为项目成员的小程序; [图片] 点击希望解绑的小程序,点击解绑。这样操作完你就可以再去绑定你需要的小程序啦! [图片] 补充:小程序相关数量限制: 成员管理人数限制 每个小程序帐号可添加一定数量的项目成员、体验成员,具体限制如下: [图片] 管理员及其他项目成员绑定帐号数不占用公众号绑定数量限制。 每个微信号可以成为50个小程序的项目成员。 每个微信号可以成为50个小程序的体验成员。 1.小程序成员管理官方教程 2.如何查询身份证个人微信号手机号绑定的帐号?
2020-11-05 - 你可能忽略的微信支付相关运营工具
前言: 本文仍属于个人整理的微信支付新手攻略一部分,适合新手食用。 1,行业解决方案 这个是官方团队出品,细心为企业提高经营效率、助力行业升级而整理的各行各业微信支付方案。 地址: https://pay.weixin.qq.com/static/solution/solution_index.shtml 介绍: 官方从生活服务、智慧零售、智慧餐饮、智慧出行、教育医疗、政务民生几个大方面(分别还包含具体行业),整理归纳了适合行业特点的运营、管理、营销方案。 [图片] 示例: 比如商超便利店,展示了全景布局打造方案,3套智慧收银方案,平台提供的会员、大数据营销、单品sku打通、电子发票多项能力,5套建议的营销玩法。 [图片] 推荐指数:★★★★☆ 2,微信收款商业版 这是一款免软件开发的微信支付收款经营产品,为线下商户提供便捷丰富的收款经营功能。 [图片] 地址: https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_business.shtml 介绍: 可自助开通,免开发,能够区分门店经营,支持信用卡收款,可自动提现到银行账号,支持接入硬件设备(收款机具和播报音箱)。还提供经营报表,可配置会员等。 [图片] 备注: 开通后,可直接手机端收款与查看经营报表,非常方便。 推荐指数:★★★★★ 3,支付有礼 这是面向符合条件的微信支付商户开放的营销能力,通过发券拉动顾客二次购买促付费。 地址: https://docs.qq.com/doc/DTVFmQ3FrdER6bkNv?opendocxfrom=admin&_t=1619360971535 介绍: 创建代金券(全场或单品券),设置代金券面额、使用门槛、可用与生效时间等,设置支付有礼活动规则,用户领券后可在下次符合要求的支付活动中使用。 [图片] 推荐指数:★★★☆☆ 4,企业付款到零钱 提供由商户直接付钱至用户微信零钱的能力,具有免费、快速到账、灵活、安全等优点。 地址: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1 介绍: 通过商户平台直接操作或接口调用,给用户付款,适用于费用报销、员工福利、用户奖励、返佣活动等场景。 备注: 申请开通要求结算周期为T+1商户,且入驻满90天,连续正常交易30天以上,保持正常健康交易。其他结算周期商户也许保持正常健康交易。 [图片] 推荐指数:★★★☆☆ 5,分账 这是为有利润和资金分配需求的商户提供的资金分配产品。 地址: https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_1 介绍: 商户将交易成功的资金,按照一定的周期,分账给其他方(员工、合作伙伴、返佣对象等),分账是基于订单维度,可单次或多次分账,一笔订单最多可以分20次,每一次可以分给50方。 接收方的账号可以是商户微信账号或个人零钱账户。 [图片] 备注: 默认开通的可分账最大比例为30%,更高分账比例需要向官方或BD咨询开通。 推荐指数:★★☆☆☆ 6,消费者投诉处理 商户需要快速获取消费者投诉信息并进行处理,提高消费者投诉的处理能力及效率,避免被官方限制、警告。 地址: https://pay.weixin.qq.com/wiki/doc/apiv3/download/交易投诉运营规范2.0.pdf 接口: https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter6_2_4.shtml [图片] 备注: 该功能极其重要,必须经常登录商户后台查看,或者通过接口API调用方式同步到自己平台,一旦被限制,会影响后续用户购买交易。 推荐指数:★★★★★ 7,下载对账单 通过官方商户平台或接口定期下载交易和资金的对账单。 介绍: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_6.shtml 备注: 官方建议每天10点后获取,如果商户开通了免充值券,注意对账单字段会有差异。建议每天通过接口定时同步,以便快捷查账。 [图片] 推荐指数:★★★★☆ 8,微信支付社区主页 可以在此发帖询问问题,会有官方支付专员和热心网友解答。 地址: https://developers.weixin.qq.com/community/pay [图片] 推荐指数:★★★★☆ 9,微信商户平台在线技术客服 在商户平台文档页面,可以点击右侧浮动按钮“技术咨询”,官方提供在线技术客服支持。 地址: https://support.pay.weixin.qq.com/online-service?from=wechatpay [图片] 推荐指数:★★★☆☆ 10,微信商户平台常见问题 在商户平台功能页面,可以点击右侧浮动按钮“我要反馈”,打开常见问题反馈留言页面。 地址: https://support.qq.com/products/4248/ [图片] 推荐指数:★★☆☆☆
2021-04-25 - 我的商户号入住已经满了90天,而且连续不间断支付也超过30天了为什么还是不让开通企业付款到银行卡呢?
我的商户号入住快一年了,而且也不间断的支付超过了30天,然后我点开通企业付款到银行卡,之后提示当前商户号暂时无法开通此功能。请保持健康交易,遵守《微信支付服务协议》及《微信支付商户平台使用协议》,后续尝试开通。可是打的商户号一直是正常的。
2021-05-23 - 海外主体如何开通微信支付
境外主体开通微信支付与境内是不一样的,目前除了香港,其他地区都只能找一家服务商接入,成为他们的子商户,才能开通成功。 1、如果你是一家海外主体公司,那么你的第一个入口应该是: https://pay.weixin.qq.com/index.php/public/wechatpay_en/partner_search#/ 香港主体可以参考: https://pay.weixin.qq.com/wiki/doc/api/wxpay/en/pages/MiniProgramPay_fw.shtml 2、找到你公司所在地区的服务商的联系方式,与他们联系,所需提供哪些资料,会告诉你,他们会帮你开通商户号,接入微信支付;资料信息包括: 营业执照 翻译认证 公司银行账户 法人及联系人信息 其他信息等。 3、每家服务商都会提供完全不同的接入开发文档,小程序开发员需要编写代码,实现整个支付流程;文档基本差不多以下内容: 统一下单(返回小程序wx.requestPayment所需要的5大参数) 退款 查询 异步回调, 签名基本都是MD5; 4、服务商会回邮件给你,包括商户号信息,一般都是: mchid:商户号,可能是真正的微信支付子商户号,也可能是服务商的内部ID,比如邮箱; key:接口文档中,签名需要用到的key;这个key与微信支付商户平台里的key不是一码事,是服务商后台需要的key; 5、推荐一些各地区的服务商: 欧洲,yabandpay, 2paynow https://www.yabandmedia.com/zh/ https://www.2paynow.com/home/ 北美, iotpay https://iotpay.ca 加拿大,alphapay 美国,usa gms 澳洲,royalpay https://royalpay.com.au 新加坡 日本东南亚,nihaopay https://www.nihaopay.com 香港, 建议试试申请直连支付; 也可以由我们代理开通海外微信支付。可联系 pm@hotix.cn。也仅仅是帮你与服务商联系并提交资料。
2021-03-28 - 境外统一下单接口返回【暂不支持该商户使用本api接口】
境外统一下单接口返回【暂不支持该商户使用本api接口】,我的微信小程序账号是:wx2531c2232e8f4dee
2021-06-07 - #微信支付 微信支付分账产品及能力整理
一、微信支付支持的分账产品及能力 1.针对直连商户的分账:文档地址 接口版本:V2 2.针对服务商模式的分账:文档地址 接口版本:V2 3.针对品牌连锁分账:文档地址 接口版本:V3 4.针对电商收付通分账:文档地址 接口版本:V3 二、企业如何选择使用哪个产品及能力 这个是根据公司自有业务来选择,有的公司使用其中一种就够了,有的公司可能涉及全部(提供解决方案的软件服务提供商),下面是官方产品介绍及场景举例,可以看看自己符合哪一种: 直连商户分账 产品介绍 (详情) 直连商户分账主要用于商户将交易成功的资金,按照一定的周期,分账给其他方,可以是合作伙伴、员工、用户或者其他分润方。 使用场景举例 1、员工奖励 零售、餐饮等行业中,当销售人员销售完成后,达到可奖励的条件,可以通过分账,将销售奖励分给员工。 2、管理资金到账时间 在酒店行业中,利用分账功能中的“冻结/解冻“能力,当用户预订/入住酒店时,交易资金先冻结在酒店的账户中,当用户确认消费离店后,再利用“分账“功能中的”分账完结“解冻资金到酒店的账户中。这样可以避免用户退款时商户账户资金不足的情况。 3、分润给合作伙伴 在与他方合作的情况下,可以用“分账”功能,将交易资金分给合作伙伴,例如物流合作商。 服务商分账 产品介绍详情 服务商分账,主要用于服务商帮助特约商户完成订单收单成功后的资金分配。 使用场景举例 • 服务商抽成 在各个行业中,服务商为特约商户提供增值服务,服务商与特约商户协商,可以从特约商户的交易流水中抽取一定的手续费。 • 员工奖励 零售、餐饮等行业中,当销售人员销售完成后,达到可奖励的条件,可以通过分账,将销售奖励分给员工。 • 管理资金到账时间 在酒店行业中,利用分账功能中的“冻结/解冻“能力,当用户预订/入住酒店时,交易资金先冻结在酒店的账户中,当用户确认消费离店后,再利用“分账“功能中的”分账完结“解冻资金到酒店的账户中。这样可以避免用户退款时商户账户资金不足的情况。 4、分润给合作伙伴 在与他方合作的情况下,可以用“分账”功能,将交易资金分给合作伙伴,例如物流合作商。 品牌连锁分账 产品介绍详情 适用于已开通连锁品牌工具箱的服务商、品牌商户和接入品牌的门店,品牌可通过供应链分账对门店、连锁业态其它参与者进行更灵活的资金管理。 使用场景举例 • 品牌管理门店账期:门店独立收款,品牌可以通过供应链分账的“冻结解冻“功能实现对门店的账期管理。 • 品牌基于门店交易抽成:门店独立收款,品牌根据门店的每笔交易在线抽成。 • 分账给服务商、供应商、店员或其他分账方:门店独立收款,按每笔交易分账给品牌合作的服务商、供应商、门店店员、或者有品牌合作的其他分润方。 • 品牌分账给门店:在品牌统一营销活动等场景,品牌可先收款再分账给门店。 电商收付通分账 电商收付通介绍 电商收付通是微信支付专为电商行业场景打造的支付、结算解决方案。电商平台的平台商户入驻微信支付成为二级商户。电商收付通支持将多个二级商户的订单进行合单支付(如电商购物车中的多笔订单合并支付),合单支付款项分别进入到二级商户各自的账户(资金为冻结状态,可用于实现二级商户账期);电商平台在满足业务流程条件下(如确认收货等),可将二级商户的冻结状态的资金解冻,并收取平台佣金。 产品介绍详情 通过分账接口,根据实际业务场景将交易款项分账到其他业务参与方的账户(如:平台抽取佣金),目前默认最高分账比例30%;同时通过该接口,实现合单交易冻结资金的解冻,从而实现对二级商户的账期; 适用于已开通电商收付通的电商平台及二级商户,电商平台可通过供应链分账实现对平台二级商户的账期管理和资金分配。 使用场景举例 • 二级商户账期管理:二级商户直接收款,电商平台通过供应链分账的“冻结解冻”能力实现对二级商户账期的管理。 • 电商平台交易抽成:二级商户直接收款,电商平台根据二级商户的每笔交易实现服务费的在线抽成。 • 分账给供应商、达人或其他分账方:二级商户直接收款,按每笔交易分账给二级商户上游的供应商、下游分销的达人、或者其他分润方。 三、官方整理的关于分账常见问题 总的来看架构有可能是一套(技术底层实现),只是针对不同场景有不同处理。所以当接入过一个后,接入第二个会比较轻松。 1)高比例分账如何申请?详情 此文档还包含以下常见问题解答: [图片] 2)分账接口问题Q&A【官方】详情 3)有问题善用社区搜索 [图片] 四、近期上线的新能力 【通知】分账新上线了2个功能 (比如之前都需要自己来计算可分账金额,比如,支付了100块,如果费率是千六,需要(100- 100x0.006)x 商户设置的可分账比例,实际可分的是99.4 x 分账比例等,目前都已提供接口反馈) 1)查询订单待分账金额 直连分账V2: https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=27_10&index=7 服务商分账V2: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_10&index=7 电商分账V3: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/profitsharing/chapter3_9.shtml 品牌分账V3: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/brand/chapter3_9.shtml 2)父查询子配置的订单最大可分账比例 服务商分账V2: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_11&index=8 品牌分账V3: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/brand/chapter3_10.shtml 五、分账使用问题和需求反馈 如果现有分账产品与能力还不能满足业务需求,可通过以下反馈地址进行反馈,产品小姐姐、运营小姐期待您的反馈 。 反馈地址:https://wj.qq.com/s2/7672765/3527/
2021-04-29 - 一个老年人的微信支付流水账回忆
那是大概2014年,或2015年和微信支付有关的一个老年人记忆。 一、PC与手机网站年代1,PC端的支付 那时我们网站给用户提供的支付途径,有支付宝、银联在线、财付通、微信支付。 这里支付宝、银联在线、财付通的对接,略。 主要还是说说微信支付。 实现方式: 网站使用的是Native支付,生成微信支付二维码URL,让用户手机扫码付款。 相关官方文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 (1)首先通过预订单取得支付二维码的URL,发给前端页面; (2)前端页面js代码,将支付URL生成二维码; 二维码生成,使用了jquery.qrcode.min.js, $("#code").qrcode({ width: 205, //宽度 height:205, //高度 text: url //任意内容 }); 再动态调整页面显示位置; (3)二维码页面同时展示“已支付”、“支付遇到问题”按钮 主要是引导用户支付后,做后续处理; 点击后,后台校验用户支付状态,页面给出提示,并跳转到个人中心页。 2,手机网站的支付 有时候用户希望能直接用手机充值付费,不想打开电脑, 只能满足用户啊! 于是一个简单的手机网站应运而生。 功能页面:登录页、产品选择页、支付页、支付结果页 支持的支付:支付宝、网银在线(京东支付)、微信支付 页面判断手机浏览器环境, 微信浏览器=》微信、网银在线 非微信浏览器=》支付宝、网银在线,略。 实现方式: 微信支付使用了JSAPI支付对接, 支付后跳转页面,校验支付状态; 同时回调地址,也校验支付状态,防止漏单。 支付成功后的页面,会给出推荐使用的浏览器:Google Chrome浏览器 时间跳转到了2016年,公司产品策略调整,转为APP研发。 二、APP与H5网站1,APP支付 根据安卓或苹果设备,我们APP支持微信支付、支付宝支付、苹果支付。 老规矩,支付宝支付、苹果支付,略。 APP客户端的微信支付SDK等处理,也略,我只是一个接口与后端人员。 主要处理的是APP接口对接。 实现方式: 服务器端生成微信支付预订单信息给APP, APP端用户支付后调用接口通知我们服务器端, 同时服务器端异步处理支付回调。 这里相关参数,都是基于微信开放平台审核通过的APP应用参数(APPID等), 交易类型也是APP, 我们项目代码里引用了WxPayHelper.app.php文件, 以及2个pem文件:apiclient_cert.pem、apiclient_key.pem。 验证签名=》检查支付状态=》做支付后续处理。 2,公众号支付 即微信浏览器端的网页支付。 我们一些H5促销活动或充值产品,使用了微信支付。 因为主要是基于微信的活动,所以这次只给用户提供了微信支付方式。 相关操作: 支付页面引用https://res.wx.qq.com/open/js/jweixin-1.0.0.js 在取得用户openid后,进行微信预订单生成(公众号支付), 支付中间页,唤起微信官方支付弹窗,然后跳转到支付结果页(成功或失败)。 因为有测试环境和正式环境,所以外部订单编号前缀根据项目运行环境做了区分。 3,支付对账单 鉴于经常会遇到查询用户支付订单的内部需求, 我做了支付宝和微信的对账单定时获取。 对,没有苹果支付的对账单,苹果它不提供详细的订单,烦。 同样,支付宝对账单,略。 微信支付对账单,我设置了每天10点以后,通过接口自动同步前一天的对账订单信息。 微信有一些对账信息都需要时间,印象里官方建议是10点以后获取。 通过设置APPID、商户号、对账单日期、订单类型等信息, 调用接口https://api.mch.weixin.qq.com/pay/downloadbill 获取账单信息。 然后对账单进行解析, 删除第一个元素并下标从0开始, 判断列数大于等于24,统计数据列大于等于5,小于20, 忘了为啥这么判断了, 然后把对账订单信息存储到数据库。 因为我们有不同的商户号(APP的,几个不同H5公众号的), 所以分别同步了各个微信商户号的账单信息。 然后,就是2019年的一系列营销产品调研应用。 三、2019年的营销体验1,支付有礼“促销活动” 即对使用微信支付满足指定条件的用户,支付后自动赠送微信代金券。 主要是在微信支付商户平台操作,用于促进用户二次消费。 具体操作: (1)向财务请款,往微信商户号内充值作为活动资金。 (2)在商户号后台支付有礼活动页面,创建指定面额的微信代金券N张。 (3)设定好代金券使用期限,逾期未使用的代金券到期后资金会自动退回到商户号。 (4)代金券实际创建为专门技术人员,且负责提交财务申请。 (5)财务人员可以在微信商户平台的“营销中心”中审查代金券和支付有礼的领用、核销记录。 问题记录: 问题1:创建该活动时,遇到了商户平台不支持我司企业网银问题, 当时商户平台支持的企业网银列表: 中国工商银行 中国建设银行 招商银行 中国农业银行 中国银行 平安银行 浦发银行 中国光大银行 兴业银行 问题2:还遇到了公司不同商户号必须同品牌才能统一设置的问题。 2,同品牌申请(APP&H5的商户打通) 同品牌商户号是指同一企业/集团/品牌/公司旗下如果存在多个微信支付商户号,该企业/集团/品牌/公司可以授权财付通支付科技有限公司将其旗下的多个商户号创建为同品牌商户号组合。主要用于更便利使用免充值营销产品功能,包括开通产品权限、配置组合内商户号为可用商户、配置活动后可用商 户免审核等。 因为对同品牌申请不熟悉,我们使用了将近1个月的邮件沟通。 申请记录: 08-07 我公司=》微信支付小助手 申请创建同品牌商户号附《同品牌商户号申请表》由财付通支付科技有限公司将我们公司旗下商户号建立同品牌商户号组合。08-07 微信支付小助手=》我公司要求提供盖章的正确的正式授权函与委托书。08-08 我公司=》微信支付小助手重新盖章扫码提供。08-13 微信支付小助手=》我公司要求提供《同品牌商户号授权申请书》word文档,现阶段无需盖章,待我们确认后再返回给您这边盖章。08-13 我公司=》微信支付小助手提供了《同品牌商户号授权申请书》word文档08-15 微信支付小助手=》我公司要求(以附件为准盖章回寄)一式一份纸质协议08-26 我公司=》微信支付小助手提供了快递物流已签收信息,催问申请进度。09-02 微信支付小助手=》我公司该申请已在8.28日配置成功。 3,企业付款到零钱 貌似这个业务功能还挺热门, 我们当时只是看到有这个功能, 然后点了几下, 就直接开通了。 我们设置的企付零相关措施: (1)微信商户平台直接设置相关额度 *单笔付款最低金额 0.30 元 *单笔付款最高金额 300.00 元 *用户维度日付款总额 300.00 元 *商户维度日付款总额 xxx 元 *每日向同一用户付款 不允许超过 1 次(开发期间,设为不许超过10次) (2)微信商户平台设置大额付款通知 *付款单笔金额超过100元时,会周知业务联络人。 (3)程序侧的限制措施 *程序内也设置相关限额。 *付款接口调用发生失败时,不自动重试付款,通过人工去商户平台给用户补发,减少程序风险。 (4)管理平台对账页面 为领导和财务人员提供了查账页面。 凡是公司员工手机号用户,自动加员工图标区分。 (5)每天邮件推送付款记录 (6)告知领导和财务人员商户平台的线上审核方式 这里面没讲前端页面怎么应用,实际就是各种H5页面推广的返佣和提现, 但前端不是我写的,所以略。 4,微信收款商业版 为了给销售人员更灵活的商务营销,开通了微信收款商业版。 (1)收款功能介绍 a,二维码收款 可以将生成的二维码图片发给用户,让用户扫码或识别付款,用户自己输入金额和填写备注; b,扫码付款 适合当面向用户收款,我们设置收款金额,扫描用户的付款码,会直接收款成功; c,收款记录 管理员和生成付款码的店员、店长,会收到有人付款的微信通知,可以查看每一笔收款记录; d,用户微信支付记录 用户可以在自己的微信支付记录中查到他的付款记录; e,退款 每一笔收款也可以进行退款操作,但必须是管理员使用操作密码确认; 2020年,2021年。。。 四、新的V3,新的征程微信支付从V2=>V3,虽然V2目前仍能正常使用,但官方肯定是推荐用更好更强大的V3。 可惜目前我还没实际应用,流水账进行不下去了。 放一下相关活动和地址吧。 1,V3文档地址 https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/index.shtml 2,V3举办的相关活动 【有奖反馈】参与微信支付文档来“找茬”,轻松赢好礼? - 微信开放社区 https://developers.weixin.qq.com/community/pay/doc/000aa24226cb18f5cc1ba2b815b001 一期到四期,只要你给V3文档找BUG,就可能获得奖品。 有奖征文 | 从产品设计、开发到运营维护,说说你与微信支付的那些事儿? - 微信开放社区 https://developers.weixin.qq.com/community/pay/doc/000ece3b0ec440d0d7eb7371e51c01 3,V3正式上线的通知 微信支付新版文档上线? - 微信开放社区 https://developers.weixin.qq.com/community/pay/doc/000ece1c82474844477b5658656401 新的V3,新的征程! 感谢阅读! ================= 附:相关产品文档地址*Native支付 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_0.shtml *JSAPI支付 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter1_1_1.shtml *APP支付 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_0.shtml *对账单 申请交易账单 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_6.shtml 申请资金账单 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_7.shtml 下载账单 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_8.shtml *支付有礼 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_7_1.shtml *代金券 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_1_1.shtml *H5发券 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter5_4_1.shtml *企业付款到零钱 https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1 *同品牌申请 https://docs.qq.com/doc/DTVVGaE55T2lpb3Vy *微信收款商业版 https://pay.weixin.qq.com/public/qrcode_pay
2021-05-10 - 大陆微信支付商户怎样支持WeChat Pay HK钱包支付?紧急!
大陆的微信商户,香港用户如何完成支付闭环,如何开通让我的商户支持WeChat Pay HK钱包支付,需要在公众号或者小程序上使用,希望官方给予回答。谢谢
2021-10-08 - 大陆 商户号 可以绑定 香港的账户进行结算嘛? 一个商户号可以绑定多少个账户
大陆 商户号 可以绑定 香港的账户进行结算嘛? 一个商户号可以绑定多少个账户
2021-10-13 - PHP微信支付类V3接口
不知不觉微信支付也更新了,接口版本也升级到了V3, 跟着微信的升级,将个人使用微信支付类也进行了升级, V3微信支付文档:https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml (相关方法已经过测试,不保证完全没问题,仅供参考,如测试有问题,可联系作者修改----查看原文) 使用方法还和之前的一样(V2微信支付),直接传递参数就可使用: 新版新增了[代码]composer[代码]安装,便于集成框架使用(Github地址): [代码]composer require fengkui/pay [代码] 首先把配置文件填写完整(细心不要填错,否则会导致签名错误): [代码]# 微信支付配置 $wechatConfig = [ 'xcxid' => '', // 小程序 appid 'appid' => '', // 微信支付 appid 'mchid' => '', // 微信支付 mch_id 商户收款账号 'key' => '', // 微信支付 apiV3key(尽量包含大小写字母,否则验签不通过) 'appsecret' => '', // 公众帐号 secert (公众号支付获取 code 和 openid 使用) 'notify_url' => '', // 接收支付状态的连接 改成自己的回调地址 'redirect_url' => '', // 公众号支付,调起支付页面 'serial_no' => '', // 证书序列号 'cert_client' => './cert/apiclient_cert.pem', // 证书(退款,红包时使用) 'cert_key' => './cert/apiclient_key.pem', // 商户私钥(Api安全中下载) 'public_key' => './cert/public_key.pem', // 平台公钥(调动证书列表,自动生成,注意目录读写权限) ]; [代码] 支付类封装相关方法: method 描述 js JSAPI下单 app APP支付 h5 H5支付 scan Navicat支付 xcx 小程序支付 query 查询订单 close 关闭订单 refund 申请退款 notify 支付结果通知 使用方法(这里已小程序支付为示例): [代码]<?php require_once('./vendor/autoload.php'); $config = []; // 支付配置 $order = [ 'order_sn' => time(), // 订单编号 'total_amount' => 1, // 订单金额(分) 'body' => '测试商品', // 商品名称 'openid' => '', // 用户openid // 'type' => 'Wap', ]; $wechat = new fengkui\Pay\Wechat($config); $re = $wechat->xcx($order); die(json_encode($re)); // JSON化直接返回小程序客户端 [代码] 如下代码是封装好的完整支付类文件(Wechat.php), 可以根据自己需求随意修改,详细的使用方法后期会有文档: [代码]<?php /** * @Author: [FENG] <1161634940@qq.com> * @Date: 2019-09-06 09:50:30 * @Last Modified by: [FENG] <1161634940@qq.com> * @Last Modified time: 2021-07-12 18:24:18 */ namespace fengkui\Pay; use Exception; use RuntimeException; use fengkui\Supports\Http; /** * Wechat 微信支付 * 新版(V3)接口(更新中) */ class Wechat { const AUTH_TAG_LENGTH_BYTE = 16; // 新版相关接口 // GET 获取平台证书列表 private static $certificatesUrl = 'https://api.mch.weixin.qq.com/v3/certificates'; // 统一下订单管理 private static $transactionsUrl = 'https://api.mch.weixin.qq.com/v3/pay/transactions/'; // 申请退款 private static $refundUrl = 'https://api.mch.weixin.qq.com/v3/refund/domestic/refunds'; // 静默授权,获取code private static $authorizeUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize'; // 通过code获取access_token以及openid private static $accessTokenUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token'; // 支付完整配置 private static $config = array( 'xcxid' => '', // 小程序 appid 'appid' => '', // 微信支付 appid 'mchid' => '', // 微信支付 mch_id 商户收款账号 'key' => '', // 微信支付 apiV3key(尽量包含大小写字母,否则验签不通过) 'appsecret' => '', // 公众帐号 secert (公众号支付获取 code 和 openid 使用) 'notify_url' => '', // 接收支付状态的连接 改成自己的回调地址 'redirect_url' => '', // 公众号支付,调起支付页面 'serial_no' => '', // 证书序列号 'cert_client' => './cert/apiclient_cert.pem', // 证书(退款,红包时使用) 'cert_key' => './cert/apiclient_key.pem', // 商户私钥(Api安全中下载) 'public_key' => './cert/public_key.pem', // 平台公钥(调动证书列表,自动生成,注意目录读写权限) ); /** * [__construct 构造函数] * @param [type] $config [传递微信支付相关配置] */ public function __construct($config=NULL, $referer=NULL){ $config && self::$config = array_merge(self::$config, $config); } /** * [unifiedOrder 统一下单] * @param [type] $order [订单信息(必须包含支付所需要的参数)] * @param boolean $type [区分是否是小程序,是则传 true] * @return [type] [description] * $order = array( * 'body' => '', // 产品描述 * 'order_sn' => '', // 订单编号 * 'total_amount' => '', // 订单金额(分) * ); */ public static function unifiedOrder($order, $type=false) { $config = array_filter(self::$config); // 获取配置项 $params = array( 'appid' => $type ? $config['xcxid'] : $config['appid'], // 由微信生成的应用ID 'mchid' => $config['mchid'], // 直连商户的商户号 'description' => $order['body'], // 商品描述 'out_trade_no' => (string)$order['order_sn'], // 商户系统内部订单号 'notify_url' => $config['notify_url'], // 通知URL必须为直接可访问的URL 'amount' => ['total' => (int)$order['total_amount'], 'currency' => 'CNY'], // 订单金额信息 ); !empty($order['attach']) && $params['attach'] = $order['attach']; // 附加数据 if (!empty($order['time_expire'])) { // 订单失效时间 preg_match('/[年\/-]/', $order['time_expire']) && $order['time_expire'] = strtotime($order['time_expire']); $time = $order['time_expire'] > time() ? $order['time_expire'] : $order['time_expire'] + time(); $params['time_expire'] = date(DATE_ATOM, $time); } if (!in_array($order['type'], ['native'])) { !empty($order['openid']) && $params['payer'] = ['openid' => $order['openid']]; $params['scene_info'] = ['payer_client_ip' => self::get_ip()]; } if (in_array($order['type'], ['iOS', 'Android', 'Wap'])) { $params['scene_info']['h5_info'] = ['type' => $order['type']]; $url = self::$transactionsUrl . 'h5'; // 拼接请求地址 } else { $url = self::$transactionsUrl . strtolower($order['type']); // 拼接请求地址 } $header = self::createAuthorization($url, $params, 'POST'); $response = Http::post($url, json_encode($params, JSON_UNESCAPED_UNICODE), $header); $result = json_decode($response, true); if (isset($result['code']) && isset($result['message'])) { throw new \Exception("[" . $result['code'] . "] " . $result['message']); } return $result; } /** * [query 查询订单] * @param [type] $orderSn [订单编号] * @param boolean $type [微信支付订单编号,是否是微信支付订单号] * @return [type] [description] */ public static function query($orderSn, $type = false) { $config = self::$config; $url = self::$transactionsUrl . ($type ? 'id/' : 'out-trade-no/') . $orderSn . '?mchid=' . $config['mchid']; $params = ''; $header = self::createAuthorization($url, $params, 'GET'); $response = Http::get($url, $params, $header); $result = json_decode($response, true); return $result; } /** * [close 关闭订单] * @param [type] $orderSn [微信支付订单编号] * @return [type] [description] */ public static function close($orderSn) { $config = self::$config; $url = self::$transactionsUrl . 'out-trade-no/' . $orderSn . '/close'; $params['mchid'] = $config['mchid']; $header = self::createAuthorization($url, $params, 'POST'); $response = Http::post($url, json_encode($params, JSON_UNESCAPED_UNICODE), $header); $result = json_decode($response, true); return true; } /** * [js 获取jssdk需要用到的数据] * @param [type] $order [订单信息数组] * @return [type] [description] */ public static function js($order=[]){ $config = self::$config; if (!is_array($order) || count($order) < 3) die("订单数组信息缺失!"); if (count($order) == 4 && !empty($order['openid'])) { $data = self::xcx($order, false, false); // 获取支付相关信息(获取非小程序信息) return $data; } $code = !empty($order['code']) ? $order['code'] : ($_GET['code'] ?? ''); $redirectUri = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . rtrim($_SERVER['REQUEST_URI'], '/') . '/'; // 重定向地址 $params = ['appid' => $config['appid']]; // 如果没有get参数没有code;则重定向去获取code; if (empty($code)) { $params['redirect_uri'] = $redirectUri; // 返回的url $params['response_type'] = 'code'; $params['scope'] = 'snsapi_base'; $params['state'] = $order['order_sn']; // 获取订单号 $url = self::$authorizeUrl . '?'. http_build_query($params) .'#wechat_redirect'; } else { $params['secret'] = $config['appsecret']; $params['code'] = $code; $params['grant_type'] = 'authorization_code'; $response = Http::get(self::$accessTokenUrl, $params); // 进行GET请求 $result = json_decode($response, true); $order['openid'] = $result['openid']; // 获取到的openid $data = self::xcx($order, false, false); // 获取支付相关信息(获取非小程序信息) if (!empty($order['code'])) { return $data; } $url = $config['redirect_url'] ?? $redirectUri; $url .= '?data=' . json_encode($data, JSON_UNESCAPED_UNICODE); } header('Location: '. $url); die; } /** * [app 获取APP支付需要用到的数据] * @param [type] $order [订单信息数组] * @return [type] [description] */ public static function app($order=[], $log=false) { if(empty($order['order_sn']) || empty($order['total_amount']) || empty($order['body'])){ die("订单数组信息缺失!"); } $order['type'] = 'app'; // 获取订单类型,用户拼接请求地址 $result = self::unifiedOrder($order, true); if (!empty($result['prepay_id'])) { $data = array ( 'appId' => self::$config['appid'], // 微信开放平台审核通过的移动应用appid 'timeStamp' => (string)time(), 'nonceStr' => self::get_rand_str(32, 0, 1), // 随机32位字符串 'prepayid' => $result['prepay_id'], ); $data['paySign'] = self::makeSign($data); $data['partnerid'] = $config['mchid']; $data['package'] = 'Sign=WXPay'; return $data; // 数据小程序客户端 } else { return $log ? $result : false; } } /** * [h5 微信H5支付] * @param [type] $order [订单信息数组] * @return [type] [description] */ public static function h5($order=[], $log=false) { if(empty($order['order_sn']) || empty($order['total_amount']) || empty($order['body']) || empty($order['type']) || !in_array(strtolower($order['type']), ['ios', 'android', 'wap'])){ die("订单数组信息缺失!"); } $result = self::unifiedOrder($order); if (!empty($result['h5_url'])) { return $result['h5_url']; // 返回链接让用户点击跳转 } else { return $log ? $result : false; } } /** * [xcx 获取jssdk需要用到的数据] * @param [type] $order [订单信息数组] * @param boolean $log [description] * @param boolean $type [区分是否是小程序,默认 true] * @return [type] [description] */ public static function xcx($order=[], $log=false, $type=true) { if(empty($order['order_sn']) || empty($order['total_amount']) || empty($order['body']) || empty($order['openid'])){ die("订单数组信息缺失!"); } $order['type'] = 'jsapi'; // 获取订单类型,用户拼接请求地址 $config = self::$config; $result = self::unifiedOrder($order, $type); if (!empty($result['prepay_id'])) { $data = array ( 'appId' => $type ? $config['xcxid'] : $config['appid'], // 由微信生成的应用ID 'timeStamp' => (string)time(), 'nonceStr' => self::get_rand_str(32, 0, 1), // 随机32位字符串 'package' => 'prepay_id='.$result['prepay_id'], ); $data['paySign'] = self::makeSign($data); $data['signType'] = 'RSA'; return $data; // 数据小程序客户端 } else { return $log ? $result : false; } } /** * [scan 微信扫码支付] * @param [type] $order [订单信息数组] * @return [type] [description] */ public static function scan($order=[], $log=false) { if(empty($order['order_sn']) || empty($order['total_amount']) || empty($order['body'])){ die("订单数组信息缺失!"); } $order['type'] = 'native'; // Native支付 $result = self::unifiedOrder($order); if (!empty($result['code_url'])) { return urldecode($result['code_url']); // 返回链接让用户点击跳转 } else { return $log ? $result : false; } } /** * [notify 回调验证] * @return [array] [返回数组格式的notify数据] */ public static function notify($server = [], $response = []) { $config = self::$config; $server = $server ?? $_SERVER; $response = $response ?: file_get_contents('php://input', 'r'); if (empty($response) || empty($server['HTTP_WECHATPAY_SIGNATURE'])) { return false; } $body = [ 'timestamp' => $server['HTTP_WECHATPAY_TIMESTAMP'], 'nonce' => $server['HTTP_WECHATPAY_NONCE'], 'data' => $response, ]; // 验证应答签名 $verifySign = self::verifySign($body, trim($server['HTTP_WECHATPAY_SIGNATURE']), trim($server['HTTP_WECHATPAY_SERIAL'])); if (!$verifySign) { die("签名验证失败!"); } $result = json_decode($response, true); if (empty($result) || $result['event_type'] != 'TRANSACTION.SUCCESS' || $result['summary'] != '支付成功') { return false; } // 加密信息 $associatedData = $result['resource']['associated_data']; $nonceStr = $result['resource']['nonce']; $ciphertext = $result['resource']['ciphertext']; $data = $result['resource']['ciphertext'] = self::decryptToString($associatedData, $nonceStr, $ciphertext); return json_decode($data, true); } /** * [refund 微信支付退款] * @param [type] $order [订单信息] * @param [type] $type [是否是小程序] */ public static function refund($order) { $config = self::$config; if(empty($order['refund_sn']) || empty($order['refund_amount']) || (empty($order['order_sn']) && empty($order['transaction_id']))){ die("订单数组信息缺失!"); } $params = array( 'out_refund_no' => (string)$order['refund_sn'], // 商户退款单号 'funds_account' => 'AVAILABLE', // 退款资金来源 'amount' => [ 'refund' => $order['refund_amount'], 'currency' => 'CNY', ] ); if (!empty($order['transaction_id'])) { $params['transaction_id'] = $order['transaction_id']; $orderDetail = self::query($order['transaction_id'], true); } else { $params['out_trade_no'] = $order['order_sn']; $orderDetail = self::query($order['order_sn']); } $params['amount']['total'] = $orderDetail['amount']['total']; !empty($order['reason']) && $params['reason'] = $order['reason']; $url = self::$refundUrl; $header = self::createAuthorization($url, $params, 'POST'); $response = Http::post($url, json_encode($params, JSON_UNESCAPED_UNICODE), $header); $result = json_decode($response, true); return $result; } /** * [queryRefund 查询退款] * @param [type] $refundSn [退款单号] * @return [type] [description] */ public static function queryRefund($refundSn, $type = false) { $url = self::$refundUrl . '/' . $refundSn; $params = ''; $header = self::createAuthorization($url, $params, 'GET'); $response = Http::get($url, $params, $header); $result = json_decode($response, true); return $result; } /** * [success 通知支付状态] */ public static function success() { $str = ['code'=>'SUCCESS', 'message'=>'成功']; die(json_encode($str, JSON_UNESCAPED_UNICODE)); } /** * [createAuthorization 获取接口授权header头信息] * @param [type] $url [请求地址] * @param array $data [请求参数] * @param string $method [请求方式] * @return [type] [description] */ //生成v3 Authorization protected static function createAuthorization($url, $data=[], $method='POST'){ $config = self::$config; //商户号 $mchid = $config['mchid']; // 证书序列号 if (empty($config['serial_no'])) { $certFile = @file_get_contents($config['cert_client']); $certArr = openssl_x509_parse($publicStr); $serial_no = $certArr['serialNumberHex']; } else { $serial_no = $config['serial_no']; } // 解析url地址 $url_parts = parse_url($url); //生成签名 $body = [ 'method' => $method, 'url' => ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")), 'time' => time(), // 当前时间戳 'nonce' => self::get_rand_str(32, 0, 1), // 随机32位字符串 'data' => (strtolower($method) == 'post' ? json_encode($data, JSON_UNESCAPED_UNICODE) : $data), // POST请求时 需要 转JSON字符串 ]; $sign = self::makeSign($body); //Authorization 类型 $schema = 'WECHATPAY2-SHA256-RSA2048'; //生成token $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $mchid, $body['nonce'], $body['time'], $serial_no, $sign); $header = [ 'Content-Type:application/json', 'Accept:application/json', 'User-Agent:*/*', 'Authorization: '. $schema . ' ' . $token ]; return $header; } /** * [makeSign 生成签名] * @param [type] $data [加密数据] * @return [type] [description] */ public static function makeSign($data) { $config = self::$config; if (!in_array('sha256WithRSAEncryption', \openssl_get_md_methods(true))) { throw new \RuntimeException("当前PHP环境不支持SHA256withRSA"); } // 拼接生成签名所需的字符串 $message = ''; foreach ($data as $value) { $message .= $value . "\n"; } // 商户私钥 $private_key = self::getPrivateKey($config['cert_key']); // 生成签名 openssl_sign($message, $sign, $private_key, 'sha256WithRSAEncryption'); $sign = base64_encode($sign); return $sign; } /** * [verifySign 验证签名] * @param [type] $data [description] * @param [type] $sign [description] * @param [type] $serial [description] * @return [type] [description] */ public static function verifySign($data, $sign, $serial) { $config = self::$config; if (!in_array('sha256WithRSAEncryption', \openssl_get_md_methods(true))) { throw new \RuntimeException("当前PHP环境不支持SHA256withRSA"); } $sign = \base64_decode($sign); // 拼接生成签名所需的字符串 $message = ''; foreach ($data as $value) { $message .= $value . "\n"; } // 获取证书相关信息 self::certificates($serial); // 平台公钥 $public_key = self::getPublicKey($config['public_key']); //平台公钥 // 验证签名 $recode = \openssl_verify($message, $sign, $public_key, 'sha256WithRSAEncryption'); return $recode == 1 ? true : false; } //获取私钥 public static function getPrivateKey($filepath) { return openssl_pkey_get_private(file_get_contents($filepath)); } //获取公钥 public static function getPublicKey($filepath) { return openssl_pkey_get_public(file_get_contents($filepath)); } /** * [certificates 获取证书] * @return [type] [description] */ public static function certificates($serial) { $config = self::$config; $publicStr = @file_get_contents($config['public_key']); if ($publicStr) { // 判断证书是否存在 $openssl = openssl_x509_parse($publicStr); if ($openssl['serialNumberHex'] == $serial) { // 是否是所需证书 // return self::getPublicKey($config['public_key']); //平台公钥 return ''; } } $url = self::$certificatesUrl; $params = ''; $header = self::createAuthorization($url, $params, 'GET'); $response = Http::get($url, $params, $header); $result = json_decode($response, true); if (empty($result['data'])) { throw new RuntimeException("[" . $result['code'] . "] " . $result['message']); } foreach ($result['data'] as $key => $certificate) { if ($certificate['serial_no'] == $serial) { $publicKey = self::decryptToString( $certificate['encrypt_certificate']['associated_data'], $certificate['encrypt_certificate']['nonce'], $certificate['encrypt_certificate']['ciphertext'] ); file_put_contents($config['public_key'], $publicKey); break; // 终止循环 } // self::$publicKey[$certificate['serial_no']] = $publicKey; } // return self::getPublicKey($config['public_key']); //平台公钥 } /** * [decryptToString 证书和回调报文解密] * @param [type] $associatedData [附加数据包(可能为空)] * @param [type] $nonceStr [加密使用的随机串初始化向量] * @param [type] $ciphertext [Base64编码后的密文] * @return [type] [description] */ public static function decryptToString($associatedData, $nonceStr, $ciphertext) { $config = self::$config; $ciphertext = base64_decode($ciphertext); if (strlen($ciphertext) <= self::AUTH_TAG_LENGTH_BYTE) { return false; } // ext-sodium (default installed on >= PHP 7.2) if (function_exists('\sodium_crypto_aead_aes256gcm_is_available') && \sodium_crypto_aead_aes256gcm_is_available()) { return \sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $associatedData, $nonceStr, $config['key']); } // ext-libsodium (need install libsodium-php 1.x via pecl) if (function_exists('\Sodium\crypto_aead_aes256gcm_is_available') && \Sodium\crypto_aead_aes256gcm_is_available()) { return \Sodium\crypto_aead_aes256gcm_decrypt($ciphertext, $associatedData, $nonceStr, $config['key']); } // openssl (PHP >= 7.1 support AEAD) if (PHP_VERSION_ID >= 70100 && in_array('aes-256-gcm', \openssl_get_cipher_methods())) { $ctext = substr($ciphertext, 0, -self::AUTH_TAG_LENGTH_BYTE); $authTag = substr($ciphertext, -self::AUTH_TAG_LENGTH_BYTE); return \openssl_decrypt($ctext, 'aes-256-gcm', $config['key'], \OPENSSL_RAW_DATA, $nonceStr, $authTag, $associatedData); } throw new \RuntimeException('AEAD_AES_256_GCM需要PHP 7.1以上或者安装libsodium-php'); } /** fengkui.net * [get_rand_str 获取随机字符串] * @param integer $randLength [长度] * @param integer $addtime [是否加入当前时间戳] * @param integer $includenumber [是否包含数字] * @return [type] [description] */ public static function get_rand_str($randLength=6, $addtime=0, $includenumber=1) { if ($includenumber) $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789'; $chars='abcdefghijklmnopqrstuvwxyz'; $len = strlen($chars); $randStr = ''; for ($i=0; $i<$randLength; $i++){ $randStr .= $chars[rand(0, $len-1)]; } $tokenvalue = $randStr; $addtime && $tokenvalue = $randStr . time(); return $tokenvalue; } /** fengkui.net * [get_ip 定义一个函数get_ip() 客户端IP] * @return [type] [description] */ public static function get_ip() { if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknow"; if(preg_match('/^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1 -9]?\d))))$/', $ip)) return $ip; else return ''; } } [代码] 本文参考文档: 1、微信支付 小程序 (v3)- PHP 完整后端代码 2、PHP 微信小程序 微信支付 v3 3、微信支付V3版本小程序支付 php签名,验签,数据解密代码分享(完整方法主参考) 4、微信支付 API v3 回调通知 签名验证 PHPdemo有嘛?
2022-02-21