- 成为微信第三方平台 代小程序支付应该怎么做?
大佬们好,我已经申请了微信第三方平台,现在可能要代小程序实现业务,比如有N个小程序,那么小程序支付应该怎么做呢? 我的需求是 我作为第三方平台代商家实现小程序业务(含支付功能),这个支付具体要怎么做?我能想到的如下两个方案 1、申请一个普通商务号,然后所有的代开发小程序都可以用这个商户号做支付么?也就是异主体支付是否可行? 2、申请一个服务商,添加特约商户,那么N个代开发小程序是否需要申请各自的商户号呢?
2021-05-07 - 第三方模板库的标准模板库和普通模板库,这两个有什么区别?
小程序模板库文档: https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/operation/thirdparty/template.html 按照以上文档说明可知:如果是标准模板库,则 ext.json 文件仅支持的参数 extAppid / ext / window 也就是说,标准模板库不支持 extEnable 参数,既然不支持,那么 ext.json 文件实际就无法生效 正因为 ext.json 文件实际无效, wx.getExtConfigSync 或者 wx.getExtConfig 实际上也无效,获取不到自定义字段 ext 配置信息。 那么这时仅支持的三个参数 extAppid / ext / window 有何意义?
2021-07-16 - 利用第三方授权 更新并发布多套小程序
开发一个小程序管理平台,其他小程序管理员只需一次授权给第三方,第三方平台即可帮助他发布小程序,不同管理员的配置参数不同,其他功能都基本相同 开发步骤: 一、注册开放平台: 到微信开放平台注册账号 :https://open.weixin.qq.com/cgi-bin/readtemplate?t=regist/regist_tmpl&lang=zh_CN 二、申请第三方平台开发 申请第三方平台必须拥有一定的开发者资质,必须先通过开发者资质认证,才可以开始第三方平台开发,在开发平台账号管理中可进行资质认证 三、创建第三方平台 申请完成后,在开发平台的管理中心,点击第三方平台,在下方可看到创建第三方按钮 [图片] 点击创建第三方平台,进入下方页面,选择平台型服务商, [图片] 1.填写基本信息,与定制化服务商一致 2.选择权限,只能选择业务必须的权限集,否则无法通过审核,公众号或小程序也可能会拒绝授权给你。(权限集是公众号或小程序的权限集合,用于实现业务) 3.填写开发资料 4.开发资料 ①授权发起也域名(即用户打开我们自己的授权页域名) ②授权事件接收URL(我们接收所有授权小程序或公众号取消授权通知、授权成功通知、授权更新通知事件的url地址 , 包括接收微信平台推送的ticket) ③消息与事件接收URL (我们接收所有授权小程序或公众号的消息和事件推送,例如客服消息 微信就会推送到这个地址上) 这里要注意一点:该参数按规则填写(需包含/$APPID$,如www.abc.com/$APPID$/callback) 填写的地址需要包含/$APPID$ 我们后续可以用nginx 重写地址 把访问指向同一个地址就可以了 例如:填写的地址是 www.abc.com/msg/$APPID$/msgEventPath.php nginx重写地址: rewrite ^/msg/(.)/(.).php /msgEventPath.php last; ④其它按照提示填写就可以了,添加上白名单ip 然后提交审核就可以了,如果信息没有问题是马上就能审核成功的,然后再管理中心的第三方平台即可看到改第三方服务商,详情里面即有改第三方平台相关的配置信息 四、小程序管理员授权给第三方平台 只有小程序管理员授权给第三方,第三方才能为该小程序发布,更新部署代码。 授权开发步骤: 1.保存component_verify_ticket, 微信端会定时推送消息到配置好的授权事件接收URL(创建三方平台时填写的,可在该三方详情中查看) 上,我们需要保存这个component_verify_ticket和 不断更新,component_verify_ticket必须保持是微信端推送的最新一个 2.用component_verify_ticket去换取第三方平台的token(第三方平台指的就是我们自己在开发的平台)token是有有效期的,所以我们要保存它的过期时间,并将token做缓存,当token没过期时就不用再去换取,反之我们要利用最新的component_verify_ticket去重新获取token 3.换取预授权码pre_auth_code,pre_auth_code是用来换取微信端的授权二维码的 4.跳转到授权页面(两种方式),建议第二种,方便 用户授权的时候会先打开我们自己的一个页面 (例如 http://www.abc.com/authorization.php ),这个页面里需要做一个按钮或者用js去跳转到微信的授权页面 ①扫码授权 :跳转后得到授权码,注意这个页面只能用网页访问,小程序访问不了,因为不能将微信域名配置为业务域名用户扫码后 就可以授权给第三方平台了 https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx。 ②点击移动端链接快速授权https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&auth_type=3&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect 请求参数(两种方式一样) component_appid 第三方平台方appid pre_auth_code 预授权码 redirect_uri 回调URI 必须和授权地址同一个域名 auth_type 要授权的帐号类型:1则商户点击链接后,手机端仅展示公众号、2表示仅展示小程序,3表示公众号和小程序都展示。如果为未指定,则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。 前四步总结(移动端快速授权流程): 用户自己获取授权连接: 需要后台配合,给出一个接口,请求该接口则直接返回最新的预授权码(pre_auth_code),拿到授权码之后,再通过拼接返回一个授权地址,跳转到改地址,即为授权页面下方图二 ,用户点击授权即可授权给第三方。用户点击授权后,授权页会自动跳转进入回调URI,并在URL参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600),我们可以通过 $GET[‘authcode’] 去获取授权用户的小程序或二维码 调用接口的accesstoken(有效期两小时) 并将其保存/更新,然后我们就可以获取授权用户小程序或公众号的信息 [图片] 5.使用授权码换取公众号或小程序的接口调用凭据和授权信息 接口调用请求说明 http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx(component_access_token在第二步可获取) POST请求参数示例: { “component_appid”:“appid_value” ,//第三方平台appid “authorization_code”: “auth_code_value”//授权code,会在授权成功时返回给第三方平台 } 请求成功后拿到 authorizer_access_token:授权方接口调用凭据(在授权的公众号或小程序具备API权限时,才有此返回值),也简称为令牌,后面调用小程序待开发的api中使用, authorizer_refresh_token:接口调用凭据刷新令牌(在授权的公众号具备API权限时,才有此返回值),刷新令牌主要用于第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。 一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌 五、小程序模板开发 第三方平台帮助旗下已授权的小程序进行代码管理时,需先开发完成小程序模版,再将小程序模版部署到旗下小程序帐号中,具体流程如下: 第一步:绑定开发小程序 (1)第三方平台的开发人员需先到微信公众平台(mp.weixin.qq.com)申请一个普通的小程序并完善小程序的头像、昵称、简介、服务类目等信息。 (2)进入微信开放平台,在第三方平台详情中,将该小程序添加为开发小程序。 注意:绑定为开发小程序后,该小程序的在开发工具中上传,代码会直接上传到开放平台,不会上传到公众平台。 第二步:小程序模版的开发和上传 使用开发小程序的开发者微信号登录微信web开发者工具(IDE),开发者工具中按照正常的小程序开发流程进行代码开发和调试。开发完成后,在开发工具中点击上传。更新模板后需要更部署到旗下小程序之前必须上传到模板库。注意:上传时版本号要求不一样,一样的版本号会被默认为同一版本,判断为管理员没有更新 第三步:添加到小程序模版库,获得模版ID 从开发者工具中上传的代码,会先存在草稿箱中,每个开发小程序只保留最新一份上传记录。开发者可将草稿箱中的代码添加到小程序模版库中,小程序模版库中的模版不会被覆盖。最多可以有五十个代码模版,添加后可以获得模版ID(TemplateID) 拿到模板ID后,再加上之前获取到的authorizer_access_token(令牌),就能为授权过给该第三方平台的小程序部署代码了。 六、为旗下小程序进行代码管理 举个例子:为授权的小程序帐号上传小程序代码 1、为授权的小程序帐号上传小程序代码 请求方式: POST(请使用https协议) https://api.weixin.qq.com/wxa/commit?access_token=TOKEN POST数据示例 { “template_id”:0, “ext_json”:“JSON_STRING”, //ext_json需为string类型,请参考下面的格式 “user_version”:“V1.0”, “user_desc”:“test”, } 参数说明: access_token 请使用第三方平台获取到的该小程序授权的authorizer_access_token template_id 代码库中的代码模版ID ext_json 第三方自定义的配置 user_version 代码版本号,开发者可自定义(长度不要超过64个字符) user_desc 代码描述,开发者可自定义 通过此请求,第三方平台会自动将模板中的代码自动部署到授权给该第三方的小程序上 更多代码管理查看文档 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1453779503&token=1a70ae891ca6e0339cf56bd1b3c322b0ec86eec9&lang= 持续更新中… 相关文章:https://developers.weixin.qq.com/community/develop/doc/0000ee097e0f00dcd55b8e40856800?jumpto=reply&parent_commentid=00004e9efb84388cd95ba8023514&commentid=000c0623e98068f0e85be2b97564
2020-12-09 - 微信点金计划商家小票对接踩坑记录
一、前言 目前微信支付完成后的回调能力被陆续回收,由点金计划来替代。 服务商没有为特约商户开通点金计划:微信支付完成后,发起支付的H5页面将被直接关闭服务商为特约商户开通了点金计划:微信支付完成后,将会跳转到微信的点金计划页面,如果服务商没有为特约商户开通商家小票功能,则点金计划页面默认展示官方小票,反之则展示商家小票官方点金计划文档(包含商家小票对接):https://wx.gtimg.com/pay/download/goldplan/goldplan_product_description_v2.pdf [图片] 二、商家小票对接注意事项 这里对于前期服务商为特约商户所做的配置不做过多的赘述,在官方点金计划文档中都有引导。 下面针对官方提供的排查点结合我自己遇到的问题做一下分析 请检查以下几点: 1. 已打开特约商户的商家小票及点金计划开关 [图片] 此处只需要联系服务商将对应开关开启即可 2. 商家小票页面需调用父页面“onIframeReady事件”的jsapi,请查看商家小票开发指引 [图片] 在商家小票页面渲染完成后,调用父页面的‘’onIframeReady‘’事件的JSAPI,并且从加载商家小票页面开始到调用’onIframeReady‘’事件的JSAPI之间的用时不可超过3s,否则会提示无法获取订单信息。 // react useEffect(() => { const mchData = {action: 'onIframeReady', displayStyle: 'SHOW_CUSTOM_PAGE'}; const postData = JSON.stringify(mchData); parent.postMessage(postData, 'https://payapp.weixin.qq.com'); },[]) // vue mounted(){ const mchData = {action: 'onIframeReady', displayStyle: 'SHOW_CUSTOM_PAGE'}; const postData = JSON.stringify(mchData); parent.postMessage(postData, 'https://payapp.weixin.qq.com'); } // javascript const mchData = {action: 'onIframeReady', displayStyle: 'SHOW_CUSTOM_PAGE'}; const postData = JSON.stringify(mchData); parent.postMessage(postData, 'https://payapp.weixin.qq.com'); 3. 调试时,扫描二维码的微信号和支付该笔测试订单的微信号需为同一个 微信官方会提供一个商家小票调试工具,首先在微信中支付一笔订单,然后将对应的订单信息交给服务商,让他们帮忙配置后生成二维码,扫描二维码即可查看商家小票页面效果了,调试时,扫描二维码的微信号和支付该笔测试订单的微信号需为同一个。 另外还有一个点就是,如果说项目有两套环境(线上,测试环境)的话,这里的商家小票链接可以配置成测试环境的,通常测试环境通常会配置vconsole来方便在手机端查看调试信息。之前因为和服务商一些沟通上的问题,一度以为这里的商家小票链接要与最开始让服务商添加的商家小票链接保持一致,于是就导致了调试上的困难,遇到问题都无法定位,基本靠猜,每次还需要改一下发个包,太愚蠢了哈哈。后来微信开放平台里的一位老大哥提醒了我,立马联系服务商给我配置了测试链接,vconsole调试信息一看就找到问题啦。 [图片] [图片] 4. 确保访问的商家小票在调试手机的微信上能正常打开 在使用商家小票调试工具之前,可以先在手机上访问配置的小票链接,确保可以正常打开。 5. 检查商家小票请求的Response Headers中X-Frame-Options是否允许payapp.weixin.qq.com访问 这点比较重要,如果没有按照要求配置好,也会导致不能访问到商家小票页面 具体如何配置可以参考如下链接: https://cloud.tencent.com/developer/section/1190032 6. ios无法加载商家小票,商家小票链接需要https 商家小票功能需要通过https进行访问,并且该域名需要由正式的证书,不能是自己生成的不安全的证书。 7. 关于md5校验 [图片] 出于安全考虑,还是要做一下md5校验的。md5校验完之后,只需要控制页面上显示的内容,仍旧在当前页面,无需跳走。成功:显示商家小票的信息 失败:展示错误提示内容即可 8. 检查商家小票页是否有重定向oauth鉴权 项目的其他页面都是要重定向去后台做oauth鉴权的,但是如果商家小票页做了重定向的话,则可能会导致跳出微信的iframe框架从而无法响应微信提供的JSAPI或者是商家小票页面无法正常加载 9. 商家小票页面加载出来了,但是内容是空白的 这个问题是我自己遇到的一个坑,在扫描调试二维码的页面中,商家小票页面是加载出来了(如何判定是加载了页面?如果商家小票页面加载失败的话,页面上是会提示无法加载订单信息这几个字的),但是页面却是空白的,后来在vconsole里查看dom结构,发现html的font-size是0px,大写的囧啊!!! 这里说一下,因为项目里用到了px2rem去做移动端的自适应,所以需要动态的设置根节点html的font-size 原来的代码是这样的,会去动态获取clientWidth动态计算font-size document.querySelector('html').style.fontSize = `${Math.min(document.documentElement.clientWidth, 1280) / 10}px` 现在将代码改成了这样,加了个判断,如果是进入商家小票页面,则把html标签的font-size设置成36px if (location.pathname.includes('bill-back')) { document.querySelector('html').style.fontSize = '36px' } else { document.querySelector('html').style.fontSize = `${Math.min(document.documentElement.clientWidth, 1280) / 10}px` } 总结: 联调的时候可以先在页面上写一些静态的信息,然后先响应“onIframeReady事件”的jsapi,保证商家小票可以加载出来之后,再在页面上增加一些自定义的信息。然后就是仔细阅读官方的开发文档就好啦!以上的内容是我自己的一些总结,初衷是能够给后面有点金计划开发需求的小伙伴一个指引,如果有错误或者不严谨的地方,还请大家指出纠正,遗漏的地方,大家可以补上。
2021-04-22 - WeixinJSBridge.invoke支付成功不返回?失败返回
[图片] 取消支付,支付失败能够回调,支付成功不回调! 而且这个是之前就上线的系统,之前是可以的,突然收到客户投诉了! 求大神指教 [图片] 现在点击完成直接关闭了网页!
2020-09-28