公司是做电商的,近期开发了一款小程序,准备线上线下同步销售玩具。这里就涉及到微信支付的功能,网上有很多教程,官方也有文档和Demo,因此微信支付还是比较容易实现的。

由于我们公司是和其他公司合作运营的,这就涉及到收入分配问题。比较传统的分配模式是月结、周结、日结这种,这些都无法实时到账。后来发现微信支付平台里,有个分账功能,正好解决这个问题。今天重点聊的这个功能,目前网络上资源很少,就写了一篇教程,希望能够帮助到其他开发员。

1、哪里开通?

这个功能在微信支付平台-产品中心-支付扩展工具。但是当你打开找到这个页面后,会发现你的支付平台并没有这个功能?!

是的,这是第一个坑。咨询了腾讯客服,回复说:这个功能目前是内测阶段,并没有全部开通,没有请耐心等待。所以,这个功能不是所有人都有。据妹纸说:如果你的流水每天正常、稳定,就有机会开通这个功能。

2、仔细看开发文档

腾讯的开发文档还是比较全面和规范的,要认真看,可能其中某一句话就是钥匙。比如这个文档

https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_3

要在以前的支付接口额外增加一个参数才可以,不看文档,估计调一天都不知道哪里有问题。

3、常见问题也很重要

这点似乎以前不怎么重视,但分账的常见问题,还是总结得很全面的。特别是红框里的那个地址,都是开发员经常犯的错误,过一遍,有个印象。 

下面开始代码开发了,小板凳搬好。

请求单次分账API

注意红框里的文字,需要证书。这是什么东东?之前很少见到的。简单说,这是一种安全机制。因为涉及到钱,所以安全系数都很高。

证书是要下载并安装的,这个证书就是指下图里的这个证书。

需要下载证书制作工具,配合使用,才能下载证书。证书以文件形式下载,就是下面这几个文件,Windows系统只用第1个文件即可,双击安装。安装过程中,需要提供密码,这个密码就是你的商户号。一路默认就能安装成功。

证书安装好,我们在代码中也要引用它。HttpPost的时候要把证书信息传进去才可以,不然一直报错,而且你根本看不出是没有证书的问题。按照下面的代码调用即可

留意这个API的其中一个参数:SignType加密类型:HMAC-SHA256,但支付的API中一直都是MD5。当时没留意,调用一直报SystemError错误。。。后来是在常见问题里找到了灵感。换成这个加密就行了。 

而且,虽然说是HMAC-SHA256加密,但每个语言加密方式可能都不一样。这里可以找微信支付的官方的SDK。在SDK中找到了这个加密的代码,好了,合并进自己代码后,发现还是报同样的错误。有没有头大?

这里要吐槽下官方的这个SDK,不知是故意留个Bug,还是没注意。总之,它提供的代码是有问题的,就是编码类型,它用的是Default,只要改成UTF-8就可以了。这个应该是整个分账功能最深的一个坑了。官文文档都不能完全相信。。。

差不多经过上面这些步骤,分账功能就没啥问题了。

但是,又有一个新的问题,就是小程序里调用微信支付,已经内置wx.requestPayment方法,支付成功后只返回一个字符串,其他啥都没有。。。可分账的API要求传入微信订单号和商户分账单号,这里有几个坑的

第1个:微信订单号容易找到,就是微信支付成功后,支付平台分配的一个订单号。在交易查询中可以拿到。那另一个商户分账单号是什么东东?查了N多资料,也问过客服,最后给出答案:这个单号是可以自己分配的。。。直接传微信订单号也可以(测试通过)。有没有欲哭无泪的感觉?看文档的描述,神乎其神的样子。

第2个:这些参数在小程序里是拿不到的,只能通过支付成功的回调地址才能读取到,就是下面这个地址。要用起来。在这个页面里,实现分账功能就行了

经过上面这些填坑,分账功能基本没啥问题了。如果再有问题,就仔细看开发文档和常见问题,基本都能解决。

微信支付中分账功能 填坑指南V1的更多相关文章

  1. 微信小程序开发填坑指南V1

    近期用了一星期的时间,开发了一个小程序.小程序名称是:小特Jarvis,取自钢铁侠的管家. 后台采用C#编写,WebAPI接口.其实开发时间并不多,小程序本身提供的API,相比公众号的API来说,已经 ...

  2. 微信分账功能与微信支付企业付款相关内容详解(payjs版)

    PAYJS开通微信分账功能以来,有很多同学咨询相关情况.很多同学关心有没有什么办法,可以让自己的商户号快速开通企业付款功能.这里就介绍下微信分账的具体相关内容,可以完美解决问题. 一.什么是微信分账? ...

  3. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  4. 微信支付中的jsapi返回提示信息

    jsapi中跳转到微信支付中触发的方法是js中的getBrandWCPayRequest方法. 改方法中的返回结果msg提示信息如下: err_msg:get_brand_wcpay_request: ...

  5. Kubernetes Fluentd+Elasticsearch+Kibana统一日志管理平台搭建的填坑指南

    在初步完成Kubernetes集群架构的建立后,通过搭建一些监控组件,我们已经能够实现 图形化的监控每个node,pod的状态信息和资源情况 通过scale进行replicateSet的扩展和伸缩 通 ...

  6. Hive 填坑指南

    Hive 填坑指南 目录 Hive 填坑指南 数据表备份 数据表备份 方法1:create table 表名_new as select * from 原表 create table 表名_new a ...

  7. Flutter 开发填坑指南

    引言 第一次在使用Flutter是在Ubuntu机器上,但是因为Android Studio还有Sdk配置问题,flutter doctor总是在这一步报错...最近又在win10上配了一下环境(真香 ...

  8. Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑

    ----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...

  9. 坑爹的微信支付v3,其实没有那么坑

    http://www.cnblogs.com/zskbll/p/wxpay.html 研究微信开发一年多了,每个新接口,都会第一时间进行研究.微信支付开放很久,一直没机会接触到支付接口,等了好久终于从 ...

随机推荐

  1. SQL语句完成Excel数据导入数据库表中流程方法及注意事项

    第一步:先查看数据库是否安装AccessDatabaseEngine_X64.exe, 如下图查看: 如果未安装先下载脚本之家下载地址 https://www.jb51.net/softs/29150 ...

  2. Python 類別 class 的繼承 Inheritance

    既然 Python 是面向物件 Object Oriented 語言,它就有類別 Class 與物件 Object 的概念. 甚麼是類別 class ? 簡單講: 類別好比蓋房子的施工藍圖 Blue ...

  3. 前端表格数据导出excel

    使用tableExport.js导出bootstrap-table表格成excel并且支持中文 1. 下载tableExport.js https://github.com/hhurz/tableEx ...

  4. 解决Selenium弹出新页面无法定位元素问题(Unable to locate element)

    Python 2.7 IDE Pycharm 5.0.3 环境细节详见Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录 对于同一页面无法定位元素问题请见姊妹篇解 ...

  5. 2017版 Jetbrains 系列软件激活方法

    1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...

  6. Selenium webdriver工作原理

    webdriver是以server-client 经典模式设计的 server端可以是任何浏览器作为remote server,职责就是处理client的请求并作出相应操作,response的具体内容 ...

  7. Protocol, Delegate

    协议的构成: 协议:用来指定代理双方可以做什么,必须做什么. 代理:根据指定的协议,完成委托方需要实现的功能. 委托:根据指定的协议,指定代理去完成什么功能. 协议的修饰符: 协议有两个修饰符@opt ...

  8. 朴素贝叶斯python代码实现(西瓜书)

    朴素贝叶斯python代码实现(西瓜书) 摘要: 朴素贝叶斯也是机器学习中一种非常常见的分类方法,对于二分类问题,并且数据集特征为离散型属性的时候, 使用起来非常的方便.原理简单,训练效率高,拟合效果 ...

  9. net core WebApi——文件分片下载

    目录 前言 开始 测试 小结 @ 前言 上一篇net core WebApi--文件分片上传与跨域请求处理介绍完文件的上传操作,本来是打算紧接着写文件下载,中间让形形色色的事给耽误的,今天还是抽个空整 ...

  10. 用代码说话:如何在Java中实现线程

    并发编程是Java语言的重要特性之一,"如何在Java中实现线程"是学习并发编程的入门知识,也是Java工程师面试必备的基础知识.本文从线程说起,然后用代码说明如何在Java中实现 ...