- 如何进行微信订单交易对账
前言: 本文仍属于新手攻略的一部分,供类似我一样的支付新人享用。 一、订单对账需求 这是根据我们的业务实践总结出的需求场景,可能和你们业务会有较多出入,仅供参考吧。 1,销售或运营查单需求 销售或运营部门,有时候会找我们技术部门确认某笔订单的到账状态。 实际他们在内部平台能直接查到订单支付状态,但订单的财务到账情况并不会同步给他们,某些场景下,他们需要确认这些信息。 2,程序运行BUG对应 微信H5支付和APP支付,偶尔会遇到用户实际支付成功,但我方订单系统没有显示支付成功,可能是某种情景下的程序BUG或网络问题。 用户或运维,会将用户支付反馈过来,这时我们首先需要确认的就是用户是否实际支付成功。 如果用户已实际支付,那先把用户付费权益加上,再修复或确认程序问题。 3,用户退款 有时会遇到用户退款需求,由销售或运维部门发起内部退款流程,但由于我们商户号有好几个(对应不同项目),但财务部门只有一个,所以需要技术部门补充用户支付的更多订单信息(属于哪个商户号、微信订单号等),以便财务人员快速定位商户号,处理后续用户退费事宜。 4,其他场景 比如定期统计对账信息,领导查阅等。 二、商户平台页面对账 不涉及开发情况下,正常的对账,就是登录官方的微信商户平台,进行用户付费查询。 1,查询位置 商户平台首页-交易中心-交易管理-交易账单 2,批量订单查询 可以直接按交易时间、支付场景、交易状态、交易金额批量查询账单信息。 [图片] 3,单个订单查询 也可以直接按照微信订单号、商户订单号查询单个订单信息。 [图片] 4,其他位置查询 也可以在账单管理里,批量打包下载。 三、API对账单同步 1,商户平台查账不方便 在官方商户平台直接查询,是可以直接对账的。 但对于我们来说,有两点不方便。 1)我们商户号较多,来回登录各个商户号流程太麻烦了。 2)我们商户号通常由财务部门管理,技术不便登录。 2,官方提供的对账单下载API 1)申请交易账单 介绍: 该接口提供按天查询对账单文件(限三个月内),可选账单日期和类型(全部/成功订单/退款订单)。 调用后会返回账单文件下载地址,该地址30秒内有效,格式类似:https://api.mch.weixin.qq.com/v3/billdownload/file?token=xxx 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_6.shtml 2)下载账单 介绍: 对下载地址download_url进行签名,并发起请求,即可下载到账单文件的数据流。 [图片] 账单文件包括明细数据和汇总数据两部分,每一部分都包含一行表头和若干行具体数据。 例如:交易账单 ALL.xlsx、REFUND.xlsx、SUCCESS.xlsx 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_8.shtml 3,公司内部平台设计 1)同步时间为每日上午10点 根据微信商户平台官方说明建议,我们应该在订单的T+1日上午10点后同步,如果更早同步,可能遇到官方数据正在生成中情况。 通过内部定时job,调用账单生成接口,解析账单下载文件,将账单内容存储到内部数据库中。 多个商户号的对账信息,都同步到内部数据库。 2)内部平台增加对账单查询功能 面向特定权限人员: 页面应标明财务账单同步时间(T+1日10点后)。 页面可以结合自身账号体系,通过查询用户账号、支付日期、支付应用(多个商户号对应的应用)、内部订单号、微信订单号等条件,查询财务订单信息。 页面也可以按范围批量查询或导出财务账单信息。 画个建议流程图吧: [图片] 感谢阅读!
2021-05-10 - 我的微搭之路-从0到1弄个简易小项目
前言:什么微搭?微搭(WeDa),全称是腾讯云微搭低代码开发平台。 微搭将繁琐的底层架构和基础设施抽象化为图形界面,通过行业化模板、拖放式组件和可视化配置快速构建多端应用(小程序、H5应用、PC Web 应用等),免去了代码编写工作,让您能够完全专注于业务场景。 微搭以云开发作为底层支撑,云原生能力将应用搭建的全链路打通,提供高度开放的开发环境,且时刻为您的应用保驾护航。 可以实现简易项目全程不写代码,拖拽完成。 参见:产品概述 https://cloud.tencent.com/document/product/1301/48874 2022.02.22 更新说明:鉴于微搭产品已经做了好几版优化,原文和现状出入很大,特做出更新。 开整:目标是做一个简易的用户反馈项目 第一步 创建应用 1,注册腾讯云账号 https://cloud.tencent.com/register 2,完成实名认证 https://console.cloud.tencent.com/developer 3,登录微搭控制台 https://console.cloud.tencent.com/lowcode 4,创建应用位置1:快速开始-》创建应用-》新建自定义应用 位置2:应用开发-》新建应用-》从空白创建 *有四种方式可以创建应用,分别是“从模板创建”、“从数据模型创建”、“从空白创建”、“从Excel创建”。 *本文为了多体验一些内容,特意选择“从空白创建”方式(即新建自定义应用),其他创建方式会更加便捷! 如图: [图片] *我们选择创建一个WEB端(H5/PC)项目,名字叫简易用户反馈。 如图: [图片] 点击新建后,会直接进入该应用的快速开始页面。 如图: [图片] 但个人习惯是先创建数据源,不着急现在就创建页面,所以让我们先回到应用首页。 可以看到我们刚创建的新应用。 如图: [图片] 以及应用详情: [图片] 接下来,我们先去设置一个用于存储信息的数据源。 第二步 设置数据源位置:应用开发-》数据源-》数据模型-》新建数据模型 早期参与微搭项目的网友需要注意,微搭数据源做了升级,对照关系如图: [图片] 这里我们使用数据模型。 1,新建数据模型如图: [图片] [图片] 然后设置数据模型名称、标识和描述,点击开始新建按钮。 这样就新建了一个数据模型。 如图: [图片] 2,添加数据模型字段默认数据模型中有数据标识、创建时间、更新时间等系统模型字段,我们点击模型字段区域底部的“添加字段”,再增加几个。 1)如图:添加用户账号字段[图片] 设置字段名称、字段标识,选择数据类型,设置最小最大长度,设置必填,然后点击确定添加。 2)我们还可以设置枚举类型的字段比如增加一个“涉及APP”的枚举字段。 如图: [图片] 可以选择是枚举,然后添加枚举项。 最后再加两个字段:问题描述、登录设备。 如图: [图片] 点击确定,数据模型就创建完毕了。 接下来,可以去拖拽控件创建页面了。 第三步 拖拽控件 1,打开应用页面编辑页位置:应用开发-》应用-》编辑应用-》进入应用页面编辑 如图: [图片] 如图:应用页面编辑页 [图片] 工作台主要分为三个功能区:顶部导航栏、组件页面区、编辑预览区 参见官方图示: [图片] 2,拖拽控件 1)表单容器将左侧组件区域的“表单容器”拖到编辑区 如图:这里还可以快速编辑表单场景和数据源绑定 这里建议使用快速编辑,表单场景选择“新增记录”, 然后数据源绑定里面找到刚才新建的数据模型“用户反馈表”,选择“创建单条记录”。 [图片] 选择“创建单条记录”后,页面会自动根据数据模型字段添加页面组件内容。 如图: [图片] 注意:此时是可以直接发布预览的,项目页面可以到此算作完成。 2)调整组件(可忽略)这一步其实可忽略,我是因为个人习惯要调整一下组件。 首先删掉我不要的“所属部门”,点击选中该组件,点删除。 如图: [图片] 点击删除原来“涉及APP”的组件,从左侧拖拽“表单选择”到编辑区域。 这里仍推荐使用“快速编辑”功能,字段绑定直接输入数据模型中的“涉及APP”字段名称app_name。 [图片] 右侧属性区域,改了占位符提示以及选项列表内容(和数据字段枚举对齐)。 [图片] 到底就做好了页面。 第四步 预览和发布1,预览位置:页面右上角-》预览 如图: [图片] 点击预览按钮,会生成提供一个二维码和链接。 [图片] 手机扫码效果: [图片] 2,发布位置:页面右上角-》发布 点击页面右上角的发布按钮,会展示发布弹出层,可以选择发布方式(正式版或体验版),可以设置应用版本号。 系统还会自动进行检查,比如我遇到2个检查问题。 提示我数据源未发布,只有发布的数据源才能公开使用,所以在底部直接点发布即可; 还提示我角色组有更新,点发布或忽略即可。 如图: [图片] 检查项都处理后,在发布弹出层上面点确定,就会进入发布状态。需要稍微等一会。 如图: [图片] [图片] 发布成功后,会提供二维码和访问链接。 [图片] 接下来就可以进行手机或电脑端体验了。 第五步 访问测试 1,扫码或复制H5链接,打开刚做的简易项目页面。如图: [图片] 填写一些信息,然后点击提交。 如图: [图片] 页面显示“提交成功” 2,数据管理后台查看写入数据位置:数据源-》数据模型-》数据管理后台 如图: [图片] 点击“数据管理后台”,或者具体数据模型操作列的“管理数据”,会自动跳转打开数据管理后台页面,并能看到系统为我们自动生成的项目数据列表。 如图: [图片] 点击“用户反馈表”的管理数据,我们打开看一下刚才页面数据是否录入成功。 如果没看到数据,需留意左上角的数据切换,是否选了正式数据。 如图: [图片] [图片] 可以看到录入成功了。 总结:虽然我描述的有点啰嗦,但从头到尾操作下来,确实做到了没写任何代码,全程鼠标点击、拖拽,就完成了一个简易项目。 当然低码并不是完全不写代码,一些项目可能还是要写一点代码的,这个后面找机会我再去试试。 2022.02.22 更新感想:对照一年前的原文,本次更改了很多内容,微搭变的越来越简便易用,越来越好。 感谢阅读!
2022-02-22 - 如何通过php调用微信小程序云开发HTTP API 数据口API,获取云数据库记录?
通过php调用云开发HTTP API获取云数据库记录,一直出现数据格式错误?有没有大神帮忙,解决一下[图片] [代码]<?php[代码][代码]$appid[代码] [代码]= [代码][代码]"wxb0149f6a58d04334"[代码][代码];[代码][代码]$secret[代码] [代码]= [代码][代码]"d5162b07a3f0454354a35a2"[代码][代码];[代码][代码]//获取接口凭证access_token[代码][代码]$url[代码] [代码]= [代码][代码]"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}"[代码][代码];[代码][代码]$json_str[代码] [代码]= [代码][代码]file_get_contents[代码][代码]([代码][代码]$url[代码][代码]);[代码][代码]$aTest[代码] [代码]= json_decode([代码][代码]$json_str[代码][代码], true);[代码][代码]// print_r($aTest);[代码][代码]$access_token[代码] [代码]= [代码][代码]$aTest[代码][代码][[代码][代码]'access_token'[代码][代码]];[代码][代码]$env[代码] [代码]= [代码][代码]'test-hz75z'[代码][代码];[代码][代码]$query[代码] [代码]= [代码][代码]"db.collection('list').get()"[代码][代码];[代码][代码] [代码] [代码]$curl[代码] [代码]= curl_init();[代码][代码]// 使用curl_setopt()设置要获取的URL地址[代码][代码]$url2[代码] [代码]= [代码][代码]"https://api.weixin.qq.com/tcb/databasequery?access_token={$access_token}"[代码][代码];[代码] [代码]curl_setopt([代码][代码]$curl[代码][代码], CURLOPT_URL, [代码][代码]$url2[代码][代码]);[代码][代码]// 设置是否输出header[代码][代码]curl_setopt([代码][代码]$curl[代码][代码], CURLOPT_HEADER, false);[代码][代码]// 设置是否输出结果[代码][代码]curl_setopt([代码][代码]$curl[代码][代码], CURLOPT_RETURNTRANSFER, 1);[代码][代码]// 设置是否检查服务器端的证书[代码][代码]curl_setopt([代码][代码]$curl[代码][代码], CURLOPT_SSL_VERIFYPEER, false);[代码][代码]//设置post方式提交[代码][代码]curl_setopt([代码][代码]$curl[代码][代码], CURLOPT_POST, 1);[代码][代码] [代码][代码]//设置post数据[代码][代码]$post_data[代码] [代码]= [代码][代码]array[代码][代码]([代码][代码] [代码][代码]$env[代码] [代码]=> [代码][代码]'pro-hz75z'[代码][代码],[代码][代码] [代码][代码]$query[代码] [代码]=> [代码][代码]"db.collection('list').get()"[代码][代码]);[代码][代码]curl_setopt([代码][代码]$curl[代码][代码], CURLOPT_POSTFIELDS, [代码][代码]$post_data[代码][代码]);[代码][代码]// 使用curl_exec()将CURL返回的结果转换成正常数据并保存到一个变量[代码][代码]$data[代码] [代码]= curl_exec([代码][代码]$curl[代码][代码]);[代码][代码]// 使用 curl_close() 关闭CURL会话[代码][代码]curl_close([代码][代码]$curl[代码][代码]);[代码][代码]$data[代码] [代码]= json_decode([代码][代码]$data[代码][代码]);[代码][代码]print_r([代码][代码]$data[代码][代码]);[代码]
2019-12-02