- 无效的openid
按文档在微信商户平台设置了支付目录,在微信公众平台设置了openid的域名,调试接口报错:无效的openid
2021-07-09 - 调用支付JSAPI缺少参数:appId
[图片] 分析原因:(1)没有“通过config接口注入权限验证配置”,所有需要使用 JS-SDK (如JS接口wx.chooseWXPay())的页面必须先注入配置信息,否则将无法调用。https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#4;(2)通过 config 接口注入权限验证配置时,注入chooseWXPay接口的权限比调用wx.chooseWXPay()接口的速度慢,导致调用失败。因为config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行(config信息验证后会执行 ready 方法,所有接口调用都必须在 config 接口获得结果之后)。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中。https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#5; 解决方法: 第一种,使用 JS-SDK提供的接口wx.chooseWXPay() :https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58 // 第一种 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58 wx.ready(function() { wx.chooseWXPay({ timestamp: 0, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符 nonceStr: '', // 支付签名随机串,不长于 32 位 package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*) signType: '', // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致 paySign: '', // 支付签名 success: function (res) { // 支付成功后的回调函数 } }); }) 第二种,在微信浏览器里面打开H5网页使用微信支付提供的JS API调起支付(WeixinJSBridge内置对象在其他浏览器中无效)https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"", // 公众号ID,由商户传入(appId为当前服务商号绑定的appid) "timeStamp":"1395712654", // 时间戳,自1970年以来的秒数 "nonceStr":"", // 随机字符串,不长于32位 "package":"prepay_id=u802345jgfjsdfgsdg888", // 统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=*** "signType":"MD5", // 微信签名方式:默认为MD5,支持HMAC-SHA256和MD5。注意此处需与统一下单的签名类型一致 "paySign":"" // 微信签名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 使用以上方式判断前端返回,微信团队郑重提示: //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 } } ); } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); }
2022-07-27 - 微信支付渠道商创建代金券,显示制券方渠道号不在配置名单?
银行下渠道商创建免充值代金券,添加可用商户时,显示“制券方渠道号不在配置名单”,已经开通了免充值代金券功能 [图片]
07-03 - 服务商代间联商户发起【代金券】接口,提示 【商户未申请过证书。请到商户平台上申请证书授权机构颁发.?
服务商代间联商户发起【代金券】接口,提示 【商户未申请过证书。请到商户平台上申请证书授权机构颁发的证书】 但是间连商户没办法登录商户平台,请问该如何操作? 间连商户号:611657185
06-25 - 微信支付接口报【签名错误】,看这一篇就够了
此文章致力解决在开发微信支付相关接口报【签名错误】,并不断升级更新 文章demo以’普通商户版’-‘JSAPI支付’作为案例(JSAPI支付文档) 先讲一下开发步骤和经验,文章后半部分讲排错经验 开发步骤 一 设置支付目录(文档链接) 支付目录,一定要设置实际支付页面的路径以 / 结尾,如果提示<当前页面URL未注册>,请检查自己实际支付页面的路径是否填写正确 发起支付的业务流程,我们做的操作应该是这样的:用户选择支付金额和其他参数–>用户点击支付–>前端向后台发起请求获取签名等参数–>后台调用统一下单接口,返回给前端需要的签名参数–>前端调用WeixinJSBridge.invoke–>用户填写密码–>支付成功–>微信发送通知给统一下单填写的回调方法。详细业务流程点我查看 二 后台调用统一下单接口(文档链接) 此接口参数非常多,第一次开发的时候,建议开发者仔仔细细对每个参数进行比对。遇到签名错误的同学,大部分人的原因是因为参数填写错误导致的 后台在给前端准备参数的时候,是要进行两次签名的:第一次是发送统一下单请求之前,对发送给微信的所有参数进行签名;第二次是微信返回预支付交易会话标识后,对传给前端的所有参数进行签名。 请注意,第一次签名和第二次签名的时候,参数是不一样的,第二次签名的时候,签名需要哪些参数呢?签名的参数是WeixinJSBridge.invoke需要用到的参数,和第一次签名需要的参数是不一样的! 对于参数package我第一次粗心大意,没有拼接字符串‘prepay_id=’希望大家也注意一些,前后台都需要拼接这个字符串‘prepay_id=’ 这是我刚刚花费10分钱获取的统一下单截图 [图片] 只有result_code和return_code都为SUCCESS的时候,说明调用成功,成功拿到预支付的id 三 前端获取参数后拉起微信支付(文档链接) [图片] 其实完整坐下来,微信支付就这么点东西,只是大家可能有些不熟悉,对于大家遇到的签名错误问题,绝大部分是参数没有认真进行参数比对,参数不能多,也不能少。如果还报错,建议从下面一些方式进行排查 排错经验 · 首先排查签名方法是否正确(签名效验工具),如果自己写的签名方法和工具展示出来的结果一模一样,说明你签名的工具方法写的没有问题,那么就剩下参数的问题了! · 然后进行参数比对,根据开发文档,进行比对,一个字母都不能差 · 第一次签名和第二次签名的APPID ,后台签名的i是小写,前端调用的是大写 · 后端第二次签名,参数package一定不要忘记拼接prepay_id · 请再三确认appid和mch_id是否正确,如果同时进行多个公众号支付开发,一定不要弄混 · 第二次签名参数timeStamp时间差距太大(你服务器时间要尽量准确,好像误差不能超过10分钟) · 中文参数错误,英文参数没有问题的,本文以MD5加密为例,请在加密的时候,指定编码格式为UTF-8 对于企业付款到零钱/银行卡 · 尝试在商户平台的账户信息中更改API密钥(账户设置-安全设置-API安全), 15分钟后生效 · 还是参数,参数,参数 终极杀器·缓存 作者开发语言是java,之前缓存无处不在,myeclipse(开发者工具)的缓存,本地编译缓存,服务器tomcat的缓存,如果你觉得我就是对的,什么都排查过了,没有问题,OK,建议清理缓存(先删除tomcat里边的项目,再添加然后重新编译项目;服务器tomcat缓存,清理tomcat文件夹下work-catalina文件夹的内容)。实在不行,重启本地电脑。重启服务器server。 请各位同学一定要先自行排查问题,如果还无法解决问题,或者你遇到过其他bug情况,欢迎留言,我会及时更新到文章,以便帮助更多人解决签名错误的问题。ღ( ´・ᴗ・` )比心 ------------------分割线------------------- 签名方式是否真的正确? ----------2019年12月2日更新,感谢斌斌反馈---------- 由于作者做支付是在2016年,辛辛苦苦整理了一份demo,一直沿用至今,忘记当时是否有官方sdk了,如果大家用的是官方sdkDemo,以上bug排查完,还是报签名错误,请检查签名方式,实际是MD5还是HMACSHA256。具体情况可以看这篇提问【JSAPI第二次签名到底什么机制?】
2021-03-18 - 支付后打开半屏小程序能力的相关调整通知
结合开发者的反馈,支付后直接打开半屏小程序能力的回收时间将延长到 2024 年 6 月 25 日,请各位开发者尽快适配,避免影响业务。 各位开发者: 打开半屏小程序 能力是微信团队提供的一项方便用户从小程序便捷打开另一个小程序的轻量化体验能力。为了优化用户体验,避免用户在没有预期的情况下以半屏方式打开另一个小程序,微信团队将回收支付后直接打开半屏小程序的能力。具体说明如下: 自 2024 年 4 月 25 日起(以下简称 “生效期”),当用户微信客户端的基础库为 3.3.5 版本及以上时,开发者将无法在 wx.requestPayment、wx.requestOrderPayment 的接口回调(包括 success 与 fail )中成功调用 wx.openEmbeddedMiniProgram 接口,其他场景不受影响。自生效期起,若调用接口,开发者将会收到 “openEmbeddedMiniProgram forbidden after payment” 的报错;用户的小程序将不会在支付后以半屏形式直接打开另一个小程序,也不会出现相关报错信息。 注意: 1、本次调整后,若开发者需要在其他场景下应用半屏小程序能力,仅支持由以下 3 个事件触发 tap 事件wx.showModal 接口 success 回调wx.showActionSheet 接口 success 回调2、若用户微信客户端的基础库低于 3.3.5 版本,开发者仍然能够在 wx.requestPayment、wx.requestOrderPayment 的接口回调中成功调用 wx.openEmbeddedMiniProgram 接口;用户的小程序仍会在支付后直接打开半屏小程序 [图片] 微信团队 2024年3月25日
04-18 - 请问这个JSapi页面里展示的这个“二维码物料”,怎么通过接口生成啊?
我看微信支付的官网上有这个介绍,但是没找到生成二维码的接口啊。 [图片]
03-22 - 微信支付优惠扣除逻辑
一、优惠券叠加使用逻辑1)不同商户创建的全场优惠(包括券和立减)默认叠加使用 假设:某笔订单可以享受全场优惠a(A商户创建,互斥使用)、全场优惠b(B商户创建,互斥使用)、全场优惠c(C商户创建,互斥使用) 则:该笔订单会同时享受 a + b + c,共3个优惠 2)同一商户创建的全场券可配置叠加使用或互斥使用,单笔订单可以核销同一商户创建的所有叠加券 + 互斥券中的一个 假设:某笔订单可以享受同一商户创建的全场券a(叠加使用)、全场券b(叠加使用)、全场券c(互斥使用)、全场券d(互斥使用) 则:该笔订单会享受 a + b + c或d中的一个,共3个优惠 3)同一商户创建的全场立减可配置叠加使用或互斥使用,单笔订单可以核销同一商户创建的所有叠加立减 + 互斥立减中的一个 假设:某笔订单可以享受同一商户创建的全场立减a(叠加使用)、全场立减b(叠加使用)、全场立减c(互斥使用)、全场立减d(互斥使用) 则:该笔订单会享受 a + b + c或d中的一个,共3个优惠 4)同一商户创建的全场立减和全场券默认叠加使用 假设:某笔订单可以享受同一商户创建的全场券a(互斥使用)、全场立减b(互斥使用) 则:该笔订单会享受 a + b,共2个优惠 5)一笔订单中,同一商品(sku维度)只能享受一个单品优惠(包括券和立减),不同的商品可以享受不同的单品优惠 假设:某笔订单可以享受单品优惠a(sku:01),单品优惠b(sku:02),单品优惠c(sku:02) 则:则该笔订单会享受 a + b或c中的一个,共2个优惠 6)若某笔订单享受了全场优惠(包括券和立减),且其中至少一个全场优惠是叠加使用的,则该笔订单才能叠加使用单品优惠 假设:某笔订单可以享受全场优惠a(叠加使用),全场优惠b(互斥使用),单品优惠c 若该笔订单享受a,则可同时享受c;若该笔订单享受b,则不可同时享受c;若该笔订单享受a+b,则可同时享受c * 指定支付方式(例如指定银行卡)的优惠需关注: 优惠是否可以叠加使用,是以制券商户号维度进行判断的,与批次指定的支付方式无关。若多个指定了支付方式的全场优惠配置了不可叠加使用,即使这几个优惠指定的支付方式不同,用户也只能享受其中一个。 举例:某笔订单可以享受全场优惠a(指定了A银行信用卡,互斥使用),全场优惠b(指定了A银行储蓄卡,互斥使用),则无论主扫或被扫,用户都只能享受a或b中的一个,且由系统指定,用户无法切换优惠。 所以,若同时存在多银行或多卡种的活动,建议将其均配置为 [可叠加使用] 。 二、优惠时的优先级当用户有多个优惠,且多个优惠不能同时使用时,优惠的使用顺序如下: 面额越高优先级越高门槛越高优先级越高过期时间越近优先级越高领券时间越近优先级越高批次ID越小优先级越高 当用户有多个可叠加使用的优惠,但订单无法满足叠加使用的条件时,优惠的使用顺序如下: 面额越高优先级越高门槛越高优先级越高当面额与门槛均相同时,则随机使用顺序,此时不判断过期时间与领取时间。 三、一笔订单最多可使用的优惠数单笔订单最多可以使用20个单品优惠,以及8个全场优惠。 当订单可用的全场券超过8张时,微信支付将筛选可用券中面额最高的8张进行优惠计算,故无法保证得出最优解。
2021-01-16 - 业务域名设置--校验文件检查失败自查指引
目前不少开发者在设置业务域名时,发现检查校验文件失败,可先按照如下步骤进行自查: 如果想保存的业务为https://test.com/,下载下来的校验文件为AbC.txt,则需要确保https://test.com/AbC.txt能够访问。 校验文件内容错误。校验文件内容一般是非HTML数据,如果下载下来的校验文件内容为HTML数据,一般为登录态过期。请重新登录小程序下载校验文件。 使用4G网络尝试访问链接,确认自身服务器没有拦截请求(常见于设置了白名单或者防火墙的服务器,需开发者自行确认下) https证书过期。请确保https证书处于有效期内。 使用curl 测试链接,确保curl能够正常访问链接,且curl出来的内容为校验文件内容。 使用time curl https://test.com/abc.txt查看链接时间,建议耗时在1s之内。 请确保url中的文件名与下载下来的文件名大小写一致。如下载的文件是AbC.txt,确保url是https://test.com/AbC.txt,不能是https://test.com/abc.txt 部分用户的服务器配置较陈旧,安全性差(如配置 768位 的 DH),为了保证通信安全,微信后台不支持,请更新服务器配置。 (1)通过https://cloud.tencent.com/product/tools#userDefined12,检测网址是否支持TLS1.2。 (2)可通过工具 https://www.ssllabs.com/ssltest/analyze.html 检查自己的服务器,对该工具标红的各项漏洞逐项修补,建议更新配置直到该工具打分为 C及以上 。 9. 如上述检查都没有问题,请重新下载校验文件重试,确保上传到服务器的文件内容与新下载的文件内容一致。
2018-06-21 - 微信点金计划商家小票对接踩坑记录
一、前言 目前微信支付完成后的回调能力被陆续回收,由点金计划来替代。 服务商没有为特约商户开通点金计划:微信支付完成后,发起支付的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 - 点金计划添加链接提示签名失败
[图片] 添加商家小票链接时,提示签名失败
2021-05-25 - 小程序开通云闪付支付后常见问题Q&A
看完记得点赞收藏好评一键三连 Q1:小程序如何开通云闪付支付功能? A1:超级管理员扫码登录商户平台「点我访问」,点击「产品中心」->「开发配置」->「支付方式配置」->「开通“云闪付付款”功能」 小提示:支付方式配置在页面最底部 [图片] Q2:开通“云闪付付款”功能后小程序需要做开发对接吗? A2:不需要,开通“云闪付付款”功能后,商户号绑定的小程序默认就支持云闪付付款了,无需做任何开发对接,原有系统无需调整。 Q3:用户使用云闪付付款,商户收款手续费是多少? A3:与商户号原费率保持一致,举例:用户在商户A小程序使用云闪付支付100元,商户A当前费率为0.6%,则应收手续费应收为1000.6%=0.6元。 Q4:用户使用云闪付付款,商户收款资金在什么时间结算到商家银行卡? A4:用户使用云闪付付款实时到微信支付商户号,根据商户号原结算周期结算。举例:用户在商户A小程序使用云闪付支付100元,商户A当前结算周期为T+1并开通自动提现功能,则在用户付款时间后一个工作日自动提现到商户银行卡。 Q5:用户使用云闪付付款的订单应如何进行查询? A5:1.在商户后台通过交易账单中的「付款银行」字段来检索对应的订单 扫码登录商户平台-交易中心-交易账单-下载交易账单,「付款银行字段」取值为:UPQUICKPASS_CREDIT和UPQUICKPASS_DEBIT的,即为用户使用云闪付付款的交易 [图片] [图片] 2.微信端可以通过商家助手小程序查看,访问「微信支付商家助手小程序」,点击「收款记录」,付款人展示为“云闪付用户”的,即为用户使用云闪付进行付款的交易。[图片] Q6:小程序“云闪付付款”功能是否支持服务商模式? A5:支持 Q7:某个小程序可以单独关闭用户使用云闪付付款功能吗? A7:可以,商户可以在商户平台指定小程序关闭该功能,并查看已关闭的小程序列表。超级管理员扫码登录商户平台「点我访问」,点击「产品中心」->「开发配置」->「支付方式配置」->「新增关闭云闪付APPID」,添加成功后该小程序用户将不再支持云闪付付款 小提示:支付方式配置在页面最底部 [图片] Q8:用户在小程序使用云闪付付款是否支持云闪付优惠? A8:支持云闪付通用优惠或全场优惠 Q9:用户使用云闪付付款后支付结果通知没有「attach」字段返回是什么原因? A9:已知问题,已排期修复 Q10 :商户后台开通了“云闪付付款”功能,为什么小程序支付时没有云闪付付款功能入口呢? A:1、手机需要安装云闪付APP 2、云闪付付款选项需要调起微信支付后才会让用户选择,当小程序自身功能有多项支付选择时,需要选择「微信支付」后才可会有云闪付付款选择[图片] [图片] Q11:用户在小程序使用“云闪付”付款后,服务商还有技术服务费吗? A:满足基础技术服务费和行业政策要求的,保持不变 Q12:商户后台开通配置云闪付后,支付时没有云闪付付款选择如何排查? A: 1.商户在后台关闭了此功能; 2.用户手机有安装云闪付app; 3.如属于以下场景,也不会展示云闪付:境外交易、指定身份支付、未成年支付、支付中签约; 4.商户号为新开通商户或近期无交易,要有稳定的流水后才会开启入口; 5.开通了“自助清关”产品不会展示云闪付; 6.电商收付通托管模式的商户不会展示云闪付; 7.小微商户(注:商业版小微灰度内测阶段)不会展示云闪付。 如有更多疑问可以跟帖回复,也可以拨打95017进行咨询
2021-12-31 - 微信支付退款订单包含全场/单品优惠时的退款规则
应用场景当买家要求退款时,订单中如果包含全场/单品优惠,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 含优惠订单退款的计算逻辑 定义 订单金额:订单优惠前的金额 退款金额:发起退款的金额,未扣除优惠部分 实退金额:买家实际收到的退款金额,退款金额减去优惠金额的部分 1. 包含全场优惠 订单金额a(整单享受全场优惠x元),发起退款金额b,实退金额=b-b/a*x。 例如:一笔订单100元(整单享受全场优惠10元),发起退款50元时,会按照比例分摊优惠金额5元(优惠金额=50/100*10),买家收到实退金额为45元。 2. 包含单品优惠订单金额a,包含商品A m元(A享受x元单品优惠)、商品B n元(B不享受单品优惠)。发起退商品A时,买家收到实退金额=m-x,发起退商品B时,买家收到实退金额=n。 例如:一笔订单100元,买家购买商品A一个10元(商品A享受2元单品优惠),商品B90元。退商品A时,扣除掉2元的单品优惠金额,买家收到实退金额8元;退商品B时,B未享受优惠,买家收到实退金额90元。 3. 包含多个单品共享的单品优惠,退部分优惠单品 订单金额a,包含商品A i个共m元(A享受x元单品优惠)、商品B n元(B不享受单品优惠)。发起退款j(j<=i)个商品A时,买家收到实退金额=m*j/i-x*j/i,发起退款商品B时,买家收到实退金额=n。 例如:一笔订单100元,买家购买商品A 2个共10元(商品A享受2元单品优惠),商品B90元。退1个商品A时,1个商品A原价5元,扣除掉1元的优惠金额,买家收到实退金额4元;退商品B时,B未享受优惠,买家收到实退金额90元。 4. 既包含单品优惠,又包含全场优惠 订单金额a(整单享受全场优惠i元),包含商品A m元(A享受x元单品优惠)、商品B n元(不享受单品优惠)。发起退款商品A时,买家收到实退金额=m-x-(m-x)/(a-x)*i,发起退款商品B时,买家收到实退金额=n-n/(a-x)*i。 例如:一笔订单100元(整单享受全场优惠10元),买家购买商品A一个10元(A享受2元单品优惠),商品B90元。退商品A时,扣除掉2元的单品优惠金额,以及全场优惠分摊金额=(10-2)/(100-2)*10=0.82元,买家收到实退金额7.18元;退商品B时,B未享受单品优惠,扣除全场优惠分摊金额=90/(100-2)*10,买家收到实退金额80.82元。 不支持使用单品部分退款的场景 以下场景在使用单品部分退款时会报错,需检查商家系统的逻辑是否正确: 1)累计退款金额大于订单金额 2)单品累计退款金额大于单品金额 3)退款请求的单品中,如果一款单品有多条记录,会拦截报错。例如单品信息传输单品A退1个、单品A退1个、单品B退1个,会报错。传输单品A退2个、单品B退1个即可 以下场景不支持单品部分退款,建议使用整单退款: 1)2019年1月1日之前的订单不支持单品部分退款。 2)在提交订单时传入的单品信息,如果存在“goods_id相同,单品单价不同”的情况,不支持单品部分退款。 3)在提交订单时,如果订单金额小于单品累加的金额,不支持部分退款。例如订单金额100元,而单品信息中的累加金额大于100元,这个场景不支持部分退款。单品信息中的累加金额需小于等于100元。 4)单笔订单只能用同一个退款接口进行退款。例如订单使用过其他退款接口退过,则无法再使用单品部分退款的接口。 什么场景会退券当代金券仍在有效期内,且金额全部退还给用户时,会退券;如果只是部分金额退还或已超过有效期,不会给用户退券。 例1:订单100元,全场券10元,整单退时,10元的券会退还给用户;如果只退50元,则券不会退给用户 例2:订单100元,单品A2个共90元,享受减10元的单品优惠,单品B10元。当退2个单品A时,会退还10元的单品优惠;只退1个单品A时,不会退还10元的单品优惠。 预充值与免充值代金券退款规则:https://developers.weixin.qq.com/community/pay/article/doc/0006e002fbcf2033279bf018051013
2021-03-10 - 一文教你处理“受平台方要求暂时冻结资金"问题
写在前面 本文适用于出现下面情况时阅读: 1、“受平台方要求暂时冻结资金” 2、“根据小程序管理规范,该appid暂不支持绑定该商户号” 注意:有问题可以跟帖回复,请文明沟通,友善表达 1、问题出现的原因 根据2022年12月25号更新的「交易类小程序运营规范」,适用于符合如下一种或多种情形的小程序: 1.1、 小程序内提供珠宝玉石、3C数码等商品在线销售及配送服务; 1.2、 小程序的账号主体为近一年内新成立的企业或个体户主体; 1.3、 小程序的账号管理员、运营者等角色,与其它高风险小程序存在关联 ; 1.4、 小程序内经营预售商品。 如符合以上情况的,需在用户主动/系统自动确认收货后(在用户点击“确认收货”、或商家录入发货信息后达到系统自动确认收货的时间周期),进行资金结算。 2、如何判断小程序是否已受新规则影响? 当出现以下几种情况时,属于受“交易类小程序运营规范”影响: 2.1 小程序后台收到“上传发货信息提醒”站内信通知 [图片] 2.2 在微信支付服务商后台为子商户绑定APPID时,提示“根据小程序管理规范,该appid暂不支持绑定该商户号”或“根据《微信小程序平台运营规范》,暂不支持该类型商户号绑定本APPID” [图片] 2.3 在微信支付商家后台出现不可用余额,点击显示“交易平台冻结”,查看详情为“在微信小程序等交易平台发生的交易,受平台方要求雪时冻结资金。解冻规则请联系交易平台查看。” [图片] 3、资金如何进行解冻正常结算? 可以选择以下任意一种方案使用: 3.1 手动发货 3.1.1 前往「功能-发货信息录入」,找到需要发货的订单,点击订单右侧的「发货」按钮 [图片] 3.1.2 选择发货方式进行发货 方式一:单件发货 1)填写商品及物流信息后点击「发货」按钮 [图片] 方式二:批量发货 下载发货单模板 [图片] 上传填写完成的发货单,点击「发货」按钮 [图片] 查看导入结果 [图片] 注意: 如发货信息录入错误,可点击订单右侧的「重新发货」按钮,修改发货信息,每个订单只允许修改一次发货信息,自动确认收货时间会根据发货修改的时间重新计算。 3.2 API接口发货 详情请参考:小程序发货信息管理服务API文档 4、Q&A Q4.1:发货后资金多久会进行结算? A4.1:根据发货方式不同结算周期也不相同: 快递物流: 1)如用户主动确认收货,则资金将于收货次日结算; 2)如用户未主动确认收货,则资金将于订单发货后的第10天,系统自动确认收货后结算 自提/同城配送/虚拟发货: 1)如用户主动确认收货,则资金将于收货次日结算; 2)如用户未主动确认收货,则资金将于订单发货后的第2天,系统自动确认收货后结算 若在用户主动/系统自动确认收货时,仍有纠纷投诉未解决,则需等待纠纷投诉解决后进行资金结算 Q4.2:出现“根据《微信小程序平台运营规范》,暂不支持该类型商户号绑定本APPID“提示怎么办? A4.2:目前银行、支付机构、渠道商、普通服务商及从业机构特约商户五类商户暂不支持接入及授权,所以商家自营类小程序暂不支持和上述类型的商户号关联,请知悉。 Q4.3:无法绑定Q4.2中的五类商户时,小程序应该如何收款呢? A4.3:使用直连普通商户/特约商户在商户后台操作与小程序APPID进行绑定后,再进行“小程序交易结算管理确认”操作即可正常支付。 操作指引(已完成第一步可以直接进行第二步授权): 第一步:小程序与商户号绑定:操作指引 第二步: 1)登陆小程序后台,点击“支付”菜单,找到已绑定商户号点击“授权” [图片] 2)已确认授权 [图片] 3)使用对应授权商户号的超级管理员微信前往"微信支付商家助手"公众号查看通知并确认 [图片][图片] 4)商户确认后,授权成功 [图片] Q4.4:在小程序交易结算管理确认时未能在"微信支付商家助手”公众号收到 《小程序交易结算管理要求确认通知》,应该怎么处理? A4.4: 1)先确认商户超级管理员本人是否已经绑定了微信号,绑定“点我” [图片] 2)待商户超级管理员绑定并启用后,再次回到页面,重新点击“授权” [图片]
2023-03-01 - 微信小程序如何配置银联云闪付支付
前言: 早在9月30号,微信派公众号就发布了腾讯微信支付与银联云闪付深化支付合作与互联互通的声明,原文地址 那么问题来了,微信小程序怎么配置支持云闪付支付呢? 简简单单就一步,就可以让小程序支持云闪付支付了 登录微信支付商户后台->「产品中心」->「开发配置」页面最底部找到「支付方式配置」,点击「开启」就可以了,无需开发,无需额外配置,只要用户手机安装了云闪付app,在小程序支付时,就可以选择云闪付付款。 [图片] 注意事项 1、当前只支持小程序使用云闪付付款,微信app需要更新到最新版 2、开通后默认商户号绑定的所有小程序均开启支持云闪付支付,如有部分小程序不想开通云闪付付款,可以指定小程序appid不开启云闪付支付 [图片] 3、支持服务商模式 4、配置成功后支持停用 5、原有接口无需改动 6、如用户使用云闪付付款,中途取消付款,是会返回在选择支付方式页面 7、支持云闪付优惠 以下为实际支付测试截图 [图片][图片] [图片] 配置了没有云闪付入口等常见问题请看下面地址 https://developers.weixin.qq.com/community/develop/article/doc/000ac04bca8558f9991df282651413
2021-12-29 - 谈谈非微信环境如何跳转/打开小程序【URL Scheme】
有些节假日活动或者业务需求,需要把H5的用户引导到小程序来,这或许就比较麻烦了, 微信环境还好,可以直接使用微信提供的<wx-open-launch-weapp>来打开小程序,具体如何实现可以参考这篇文章: https://developers.weixin.qq.com/community/develop/article/doc/000c00b4490678f528baf2cf756413 现在谈的是非微信环境打开我们自己的小程序,如何实现? 我们可以使用微信提供的【URL Scheme】地址来实现跳转。 具体怎么操作,如下: 如何获取【URL Scheme】地址,获取方法有2种? 1、可以不用通过服务器调接口,通过登录公众平台,小程序管理后台「工具」-「生成URL Scheme」入口可以获取打开小程序任意页面的URL Scheme(位置在登录后右上角),可以填写你需要跳转小程序的页面地址及参数,点击生成即可 [图片][图片] 2、可以通过微信api接口服务器端调取来生成【URL Scheme】地址,使用一个token就可以实现获取,生成的地址及参数和上面一样的,可以配置对应的参数,地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html 怎么正确使用呢? iOS系统支持识别URL Scheme,可在短信等应用场景中直接通过Scheme跳转小程序。 Android系统不支持直接识别URL Scheme,用户无法通过Scheme正常打开小程序,开发者需要使用H5页面中转,再跳转到Scheme实现打开小程序,跳转代码示例如下: location.href = 'weixin://dl/business/?t= *TICKET*' 为了兼容苹果和安卓都能使用,我个人建议统一写成脚本执行跳转locataion.href=‘URL Scheme地址’,这可能会出现,有些浏览器会自动拦截脚本自动执行的内容,导致跳转H5页面不能马上调起跳转小程序,所以页面最好保留一个按钮,标明跳转失败可以点击此按钮跳转小程序。 到此已经可以在非微信环境浏览器打开微信小程序了,祝你代码好运没bug(注:企业微信也支持这种【URL Scheme】调起小程序)。
2021-04-12 - H5免鉴权跳转小程序常见问题解答
看到很多开发者在H5免鉴权跳转小程序这处于懵逼状态!!!! 我下边解释一下什么叫免鉴权????? 下方是官方文档内对免鉴权跳转能力的解释 [图片] 注意第二段话 静态网站网页在微信客户端打开时 也就相当于什么,相当于在微信中打开这个开放按钮时候才会免鉴权,此时是通过什么跳转的呢 没错是通过上边代码中 username="小程序原始账号 ID(gh_ 开头的)" path="要跳转到的页面路径" 此时根据这两个参数跳转的,此时和云函数半毛钱关系没得!!!! 此时相当于什么 相当与小程序内的 wx.navigateToMiniProgram(Object object) 此时你想说我就想单纯实现微信内H5的跳转,且想在路径传参怎么解决??? js获取静态网站url后的参数,原生js去替换username与path的值呀 let launchBtn = document.getElementById('launch-btn') launchBtn.setAttribute("path", "XXXXXXXXXX"); //HTML 属性 launchBtn.setAttribute("username", "XXXXXXXXXX"); //HTML 属性 在微信以外的渠道中都需要走云函数去请求拿到 openlink 或自建网站鉴权调用接口获取openlink 那些发帖想在小程序A云函数跳转B小程序的别想了不可以 在uniapp里腾讯云函数搞的也别想了,那边没有内置小程序的sdk,调用不动云函数的 乖乖去云开发里上传静态网站,并打开允许访问,云函数打开未登录允许调用 或者自建网站鉴权获取 下边发一条我自己开发的H5跳小程序链接,你们可以去测试 https://u.imvp.top/?s=jlqwyBFN ——本链接由微信小程序【链接工具】生成 [图片] 看到这里有人问我,我这个链接后边的参数是干什么的?这个参数是控制跳转哪一篇文章的加密id。 在任何情况下访问网站我都会去解析真实对应的文章链接是什么? 微信内我会将真实链接拼接在wx-open-launch-weapp属性内 if(res.result.url){ launchBtn.setAttribute("path", `/pages/basics/web_view.html?url=${encodeURIComponent(res.result.url)}`); //HTML 属性 } [图片] 此时文章链接已经拼接在属性path上了。微信内点击也会跳转到指定位置, 非微信内我会拿到openlink 重定向Url唤醒微信,实现外链跳转。 云函数端代码同样采用了官方示例代码,增加了openlink 入库绑定对应文章链接与加密参数,免得多次生成浪费! 2021年1月26日补充 因为目前URL Scheme进入小程序仅可进入正式版本,无法进入测试版,自己在开发时候专门做了参数埋点,上次测试后才二次对接参数提版,为此我将参数格式说明一下 //小程序端首页onLoad onLoad(options) { if(options.s=='u'){ //openlink解析后的参数标志位 uni.navigateTo({ url:`/pages/basics/web_view?id=${options.id}` }) } } //云函数端,生成openlink const result = await cloud.openapi.urlscheme.generate({ jumpWxa: { path: `/pages/index/index`, // 替换自己的url路径 query: id?'s=u&id='+id:'', // s=u 作为我自己的参数标志位 }, // 如果想不过期则置为 false,并可以存到数据库 isExpire: false, // 一分钟有效期 expireTime: parseInt(Date.now() / 1000 + 60), }) //存储跳转链接 saveOpenlink(id,result.openlink) return { ...result, //urlscheme返回的所有参数 主要使用result.openlink s:id, //加密文章ID url:articleData.data.url //文章链接 } //html端 供小程序环境访问跳转使用 let launchBtn = document.getElementById('launch-btn') launchBtn.setAttribute("path", `/pages/basics/web_view.html?url=${encodeURIComponent(res.result.url)}`); //HTML 属性
2021-01-26 - 小程序开发——微信外环境静态h5跳转小程序
写在前面如果你想要自主开发,但没有云开发相关经验,看官方文档仍旧无法从浏览器环境h5页面调起小程序,那么可以来学习下本教程。 可以看下本文发表时间,所贴示例代码均为实际demo代码,能成功调起小程序的。 不太方便录制视频,这里就以图文形式全流程介绍如何实现微信外环境静态h5跳转小程序。 一.先贴下官方开发文档,虽没能成功调起小程序,也是可以先看下的1.官方开发文档参考:静态网站 h5跳小程序 官方文档只提供了关键代码,但是没说怎么上传静态文件,怎么上传云函数。 2. 微信开放社区知识库:云开发短信跳小程序(自定义开发版)教程 有视频教程,有demo,有介绍怎么上传静态网站、云函数,但是视频demo跟文中提供的github源码不一致,反正我是看的有点懵。 二.自己摸索,博采众长,终于在浏览器中拉起小程序了工单提不了,提问没人回,做微信开发最头大的就是这个。后边百度搜索了好久,找到了比较简单可行的方法,这里梳理了下,即使没用过云函数的也可以参考本文操作。 经验证,本示例可以在微信内外环境中调起微信小程序。 三. 需要准备的工具、材料 微信开发者工具、非个人主体并且已认证的(微信认证)小程序。 四. 操作步骤: 1.开通云开发服务、云开发权限设置、开通静态网站功能: 1-1 开通云开发服务,微信开发者工具——云开发 [图片] 创建云开发环境,设置环境名称、付费方式(默认预付费,可以选按量付费,有一定免费额度的,无论个人开发调试还是公司项目使用,选按量付费就好了) [图片] 开通成功之后,概览界面右侧,能看到环境id,记住这个id,后边配置h5页面会用到。 [图片] 1-2 设置云开发权限,设置——权限设置,未登录用户访问云资源权限设置,勾选未登录用户访问权限: [图片] 1-3 开通镜头网站,菜单栏”更多“——静态网站——开通 [图片] [图片] 扫码确认,等初始化,可能需要点时间,无需等待,开通成功会有短信通知,可以先进行后边步骤 [图片] 2.创建云开发小程序、设置云开发环境录用户访问云资源权限设置 2-1 创建云开发小程序: 如果小程序已经是云开发服务了,那就可以直接用了。如果不是,那就创建一个云开发小程序。 这个小程序只是用来上传云函数的,appid要填要开通云开发功能的小程序,即h5要跳转的小程序。另外后端服务要选微信云开发,至于模板,随便选个及就行。只是为了实现跳转小程序这个功能,上传云函数而已,上传之后就没用了(除非要更新云函数)。 [图片] 云开发小程序创建好之后,可以看到有 cloudfunctions 和 miniprogram 两个目录。cloudfunctions 目录就是我们创建、上传云函数要用的目录了。 [图片] 2-2 设置云开发环境: cloudfunctions 目录上边单击鼠标右键,设置当前环境,选择前边创建的云环境 [图片] 3.创建云函数 请注意,这里的创建云函数不是在云开发控制台直接创建的,是需要通过小程序创建并部署的。虽然控制台也可以直接创建,但是不能直接用。别问我怎么知道,踩过这个坑而已。 3-1 下载官方云函数示例代码(点击下载),源码目录如下: [图片] 3-2 将 cloudfunctions 目录中的 public 文件夹复制到云开发小程序项目 cloudfunctions 目录下: [图片] 3-3 编辑 public/index.js 文件,将 getUrlscheme函数中的path改成要调起小程序的页面路径。 [图片] 相关代码: // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() switch (event.action) { case 'getUrlScheme': { return getUrlScheme() } } return 'action not found' } async function getUrlScheme() { return cloud.openapi.urlscheme.generate({ jumpWxa: { path: '/pages/login/index', // query: 'i=a', }, // 如果想不过期则置为 false,并可以存到数据库 isExpire: false, // 一分钟有效期 expireTime: parseInt(Date.now() / 1000 + 60), }) } 4.安装依赖 鼠标放到public目录上,单击鼠标右键,快捷菜单选中"在内建终端中打开",然后运行 npm install 安装依赖 [图片] 5.上传部署云函数: public 目录上,单击鼠标右键,选择”上传并部署:云端安装依赖(不上传node_modules), [图片] 部署后,打开云开发控制台——云函数,就能看到前边创建部署的云函数了: [图片] 等几秒钟,云函数就能部署成功了。 6.修改云函数权限: 云开发控制台——云开发——云开发权限,自定义安全规则,点击右侧的“修改” [图片] 点允许所有用户访问,这样所有用户都可以免鉴权通过h5调起小程序了 [图片] 可选的进阶的云函数安全规则模板(只放开了让 public 云函数支持未登录访问) { // * 为通配符,表示对所有函数适用 "*": { // invoke 表示调用权限控制 // auth 包含鉴权信息,如果是未登录模式,则 auth == null "invoke": "auth != null" }, // 函数名,该规则优先级会高于通配符 "public": { // 表示允许所有来源调用,包括未登录用户 "invoke": true } } 7.编写及上传h5静态页面到云开发环境 编辑前边下载的 h5/jump-mp.html 文件,将所有标注<!-- replace -->的地方都修改成真实的内容就好了。示例代码如下: <html> <head> <title>打开小程序</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"> <script> window.onerror = e => { console.error(e) alert('发生错误' + e) } </script> <!-- weui 样式 --> <link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/2.4.1/weui.min.css"> </link> <!-- 调试用的移动端 console --> <script src="https://cdn.jsdelivr.net/npm/eruda"></script> <script>eruda.init();</script> <!-- 公众号 JSSDK --> <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <!-- 云开发 Web SDK --> <script src="https://res.wx.qq.com/open/js/cloudbase/1.1.0/cloud.js"></script> <script> function docReady(fn) { if (document.readyState === 'complete' || document.readyState === 'interactive') { fn() } else { document.addEventListener('DOMContentLoaded', fn); } } docReady(async function() { var ua = navigator.userAgent.toLowerCase() var isWXWork = ua.match(/wxwork/i) == 'wxwork' var isWeixin = !isWXWork && ua.match(/micromessenger/i) == 'micromessenger' var isMobile = false var isDesktop = false if (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|IEMobile)/i)) { isMobile = true } else { isDesktop = true } if (isWeixin) { var containerEl = document.getElementById('wechat-web-container') containerEl.classList.remove('hidden') containerEl.classList.add('full', 'wechat-web-container') var launchBtn = document.getElementById('launch-btn') launchBtn.addEventListener('ready', function(e) { console.log('开放标签 ready') }) launchBtn.addEventListener('launch', function(e) { console.log('开放标签 success') }) launchBtn.addEventListener('error', function(e) { console.log('开放标签 fail', e.detail) }) wx.config({ debug: false, // 调试时可开启 appId: 'wxad8exxxx', // <!-- replace --> timestamp: 0, // 必填,填任意数字即可 nonceStr: 'nonceStr', // 必填,填任意非空字符串即可 signature: 'signature', // 必填,填任意非空字符串即可 jsApiList: ['chooseImage'], // 必填,随意一个接口即可 openTagList: ['wx-open-launch-weapp'], // 填入打开小程序的开放标签名 }) } else if (isDesktop) { // 在 pc 上则给提示引导到手机端打开 var containerEl = document.getElementById('desktop-web-container') containerEl.classList.remove('hidden') containerEl.classList.add('full', 'desktop-web-container') } else { var containerEl = document.getElementById('public-web-container') containerEl.classList.remove('hidden') containerEl.classList.add('full', 'public-web-container') var c = new cloud.Cloud({ // 必填,表示是未登录模式 identityless: true, // 资源方 AppID resourceAppid: 'wxad8exxxx', // <!-- replace --> // 资源方环境 ID resourceEnv: 'cloud-mall-2gs0uxxxx', // <!-- replace --> }) await c.init() window.c = c var buttonEl = document.getElementById('public-web-jump-button') var buttonLoadingEl = document.getElementById('public-web-jump-button-loading') try { await openWeapp(() => { buttonEl.classList.remove('weui-btn_loading') buttonLoadingEl.classList.add('hidden') }) } catch (e) { buttonEl.classList.remove('weui-btn_loading') buttonLoadingEl.classList.add('hidden') throw e } } }) async function openWeapp(onBeforeJump) { var c = window.c const res = await c.callFunction({ name: 'public', data: { action: 'getUrlScheme', }, }) console.warn(res) if (onBeforeJump) { onBeforeJump() } location.href = res.result.openlink } </script> <style> .hidden { display: none; } .full { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .public-web-container { display: flex; flex-direction: column; align-items: center; } .public-web-container p { position: absolute; top: 40%; } .public-web-container a { position: absolute; bottom: 40%; } .wechat-web-container { display: flex; flex-direction: column; align-items: center; } .wechat-web-container p { position: absolute; top: 40%; } .wechat-web-container wx-open-launch-weapp { position: absolute; bottom: 40%; left: 0; right: 0; display: flex; flex-direction: column; align-items: center; } .desktop-web-container { display: flex; flex-direction: column; align-items: center; } .desktop-web-container p { position: absolute; top: 40%; } </style> </head> <body> <div class="page full"> <div id="public-web-container" class="hidden"> <p class="">正在打开 “xxxx”...</p> <!-- replace --> <a id="public-web-jump-button" href="javascript:" class="weui-btn weui-btn_primary weui-btn_loading" onclick="openWeapp()"> <span id="public-web-jump-button-loading" class="weui-primary-loading weui-primary-loading_transparent"><i class="weui-primary-loading__dot"></i></span> 打开小程序 </a> </div> <div id="wechat-web-container" class="hidden"> <p class="">点击以下按钮打开 “xxxx”</p> <!-- replace --> <!-- 跳转小程序的开放标签。文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html --> <wx-open-launch-weapp id="launch-btn" username="gh_783bxxxx" path="/pages/login/index"> <!-- replace --> <template> <button style="width: 200px; height: 45px; text-align: center; font-size: 17px; display: block; margin: 0 auto; padding: 8px 24px; border: none; border-radius: 4px; background-color: #07c160; color:#fff;">打开小程序</button> </template> </wx-open-launch-weapp> </div> <div id="desktop-web-container" class="hidden"> <p class="">请在手机打开网页链接</p> </div> </div> </body> </html> 关键修改点在这三处: [图片] [图片] [图片] 8上传h5页面到云开发环境: 云开发控制台——更多——静态网站——文件管理,点击上传文件,选择上边改好的h5页面即可 [图片] 上传成功: [图片] 9.测试验证、配置域名: 静态网站窗口,选择”网站配置“,可以看到已经分配了测试域名,可以直接复制这个页面到手机浏览器中直接打开,如果前边操作没有遗漏的话,就能在浏览器中调起微信小程序了。 [图片] 四.开发中遇到的异常情况排雷: 1.-501000:environment not found 未找到环境,检查html文件中云环境id配置,直接复制云开发控制平台概览中的环境ID就好了,如下: [图片] [图片] 2.-501023: permission denied 没有权限,云开发控制平台——设置——权限设置——勾选”未登录用户访问权限“就好了 [图片]
2022-06-28 - 微信小程序新能力:URL Scheme,可从短信跳转小程序
最近小程序上线了一个超级流量的新入口:URL Scheme。通过小程序页面的URL Scheme,可以在短信、邮件或微信外部的网页中打开小程序。 那么如何实现呢?官方文档已经写的很清楚啦,这里简单介绍一下。 首先,获取URL Scheme,通过服务端接口可以获取打开小程序任意页面的URL Scheme,支持生成到期失效和永久有效的URL Scheme。 [图片] 然后,通过短信群发平台将获取的URL Scheme + 营销文案发送到用户的手机上。 最后,用户收到短信后,直接点击URL Scheme唤起微信,跳转到对应小程序页面,就是这么简单。 除此之外,还可以通过邮件或外部浏览器打开跳转小程序。 由于部分操作系统仍不支持直接识别URL Scheme,因此直接将Scheme发送给用户可能存在无法打开小程序的情况。 为此,我们可以先准备一个H5页面,再从H5页面跳转到URL Scheme实现打开小程序。 [代码]location.href = 'weixin://dl/business/?ticket= *TICKET*' [代码] H5的示例代码我已经更新到Github,可以复用起来,基于官方的案例做了些改动,增加PC端打开时生成二维码方便手机扫码使用。 这次新能力的更新将使微信小程序不再局限于微信内部的流量,天花板被掀开啦。 而且短信和邮件营销的触达成本非常低,营销成本的压低也会催生出很多新的流量玩法,我们敬请期待吧。
2021-01-08 - URL Scheme和URL Link在应用场景上有什么区别?
翻阅了文档,发现对于短信外链跳转微信小程序有上述两种实现方式,想请问各位大佬,两者同时存在的原因是什么?两者实现的业务场景有什么不一样? 希望各位大佬能帮忙解答上述的疑问,指导后续对接或开发应该用哪个接口。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html
2022-05-24 - 小程序内的H5链接可以不通过web-view组件访问而直接跳出小程序在微信浏览器中打开吗?
小程序内打开H5都是需要满足2个条件:1. 链接是https;2.小程序后台配置业务域名;符合条件的H5链接才能在小程序内通过web-view打开,我现在有一个第三方的链接,在小程序内点击该链接希望能直接跳出小程序在微信浏览器中打开,而不是在小程序内通过web-view打开,请问小程序目前有该接口可以实现吗?如果没有相关接口,请问这种情况有什么解决方案吗?
2023-04-18 - 小程序无法跳转到外部网页是什么原因?
我的小程序,通过<web-view>组件,跳转到外部网页,并上传了校验文件并通过校验,在编辑器中能正常打开网页,但用手机预览无法打开网页,是什么原因? [图片]
2023-02-01 - H5跳转微信小程序成功案例
本人使用的VUE框架。 代码提示: 1、vue代码; 2、点击事件代码; 3、php代码; 遇到的大坑重要提示: 3、必须是认证服务号; 4、必须是服务号绑定的微信小程序 5、https接口获取服务号的access_token 6、如果你的https接口没有问题,但是你的wx-open-launch-weapp标签没有显示或者点击无反应。有以下原因: 1》、vue代码样式问题,可以根据我的代码写样式,最好写成一样的。 2》、在微信开发者工具没有反应的话,最好在微信客户端试试。 3》、JSSDK版本是1.6.0。 4》、如果框架写上还不行,可以试试在文件main.js中,写上: Vue.config.ignoredElements = [‘wx-open-launch-app’, ‘wx-open-launch-weapp’]; 新增项: 5》、在小程序后台配置上业务域名,域名必须有证书。代码放到服务器上,用业务域名访问。 官方链接参考: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html 还是不行的话,下方留言或者私信我。 1、<template> <div class=“cnt”> <div> <button @click=“onClickOpens”>新开页面跳转</button> </div> <div class=“test-position”> <wx-open-launch-weapp id="launch-btn" username="gh_xxxxxxxxxx" path=“pages/index/index.html?user=123&action=abc” > <script type=“text/wxtag-template”> <style>.btn {width: 200px; height: 100px;}</style> <button class=“btn”>打开测试小程序</button> </script> </wx-open-launch-weapp> </div> </div> </template> 2、 onClickOpens() { this.$axios({ method: “POST”, url: “https://接口”, data: { url: window.location.href, }, }).then(function (res) { console.log(res); if (res.status == 200) { console.log(res.data.appid); wx.config({ debug: true, appId: res.data.appid, timestamp: res.data.timestamp, nonceStr: res.data.nonce_str, signature: res.data.sign, jsApiList: [“scanQRCode”], openTagList: [“wx-open-launch-weapp”], // 可选,需要使用的开放标签列表,例如[‘wx-open-launch-weapp’] }); wx.error(function (res) { console.log(res); // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); } }); }, 3、 [图片]
2022-12-25 - 根据小程序管理规范,该appid暂不支持绑定该商户号”
进行第三方通联认证时 在绑定小程序APPID时 提示:根据小程序管理规范,该appid暂不支持绑定该商户号 这是什么原因 之前也进行过同样的绑定 并没有出现过这个问题 麻烦懂得朋友 给解答一下 谢谢
2023-02-09 - 微信小程序通过web view跳转微信公众号,微信公众号内的支付模块调不起支付?
微信公众号内的支付模块可以调起支付 在小程序通过web view打开微信公众号,就唤不起微信公众号模块的支付功能 请问有解决方案吗
2023-01-03 - 服务商绑定特约商户小程序支付 提示 由于类型限制,此APPID暂不支持绑定该商户号 需要如何处理?
商户是经服务商签约的特约商户,然后绑定商户的商户小程序APPID时提示 由于类型限制,此APPID暂不支持绑定该商户号 无法绑定,商户的主体营业执照是大概3个月前才注册的 跟这个有关吗?那营业执照大概注册多久后的商户才可以对接支付[图片][图片]
2023-02-07 - 刷脸获得18位付款码后调用付款码支付,返回[商户无权限使用该付款码]怎么解决?
商户已经开通了微信刷脸支付和付款码支付, 刷脸获得18位付款码后调用付款码支付,返回[商户无权限使用该付款码]怎么解决?
2020-09-24 - 刷脸支付SDK for windows 刷脸获取付款码后 通过官方直连 "商户无权限使用该付款码"
SDK 调用获取凭证 使用的appid,mch_id 是服务商的信息; 刷卡支付时 返回错误 商户无权限使用该付款码, 现有设备 青蛙PRO 的付款码 正常使用。
2021-12-02