微信支付 mchid key扫码支付mchid怎么获得

干货分享 微信支付服务商开发必读-移动支付网
干货分享 微信支付服务商开发必读
来源:移动开发技术&&&&作者:JeffChen
  大概几个月前,写过一篇&关于微信支付服务商开发的一些基础知识&,随着时间推移,接口略有变动,并且有些问题最近服务商都在反复问,在这里重新更新一版,并且更名为&微信支付服务商开发必读&。
  服务商模式,适用于有软件开发能力的公司帮助其他商户接入微信支付。
  目前官方的政策是达到一定条件可以获取返佣,并且微信支付刚刚公布了星火计划,拿出资金帮助服务商做运营,同时微信支付也在和滴滴进行跨界的合作。
  1. 服务商在商户平台的特约商户管理里,可以帮助商户提交公司或者个体户的资料,申请通过后可以获得特约商户号和商户平台密码。
  2. 服务商可以在开发配置里配置默认关注的服务号appid,这个默认关注是使用服务商接口发生微信支付时的默认功能。
  目前刷卡支付没有金额门槛就可以默认关注,其他支付方式需要金额大于5元(具体推荐关注的规则,请看之前的一篇文章)。
  3. 设置默认关注时提示主体不一致,无法设置?
  微信规定这里默认关注服务号的公司主体和申请这个特约商户的主体是一样的,不然会报这个错。
  遇到这个错误找对接的商务经理解决, 需要签署额外的推荐关注的协议。
  4. 如果特约商户没有服务号,这里默认关注可以不设置,那么支付成功后没有默认关注。
  5. 服务商模式支持刷卡支付,公众号支付,扫码支付模式二(模式一不支持),APP支付(请咨询商户经理,额外开通权限)。
  6. 特约商户的开发配置里,有一个特约商户appid配置的按钮(接口里的sub_appid)是否需要绑定呢?
  首先要明确,这里添加sub_appid的作用,是为了微信支付返回sub_openid(用户在sub_appid下的openid)
  6.1 通常情况下不需要绑定特约商户appid
  6.2 一些特殊情况下,需要绑定特约商户appid
  以下分别说明这2点。
  7 针对6.1中提到的没有绑定特约商户appid,接口参数如何传?
  a . 特约商户没有服务号(appid)或者商户不需要知道用户在特约商户服务号(sub_appid)下的openid,那么appid是可以不绑定的
  b. 对于没有绑定特约商户appid,刷卡支付和扫码支付接口传如下参数:
  mchid 服务商商户号
  appid 服务商的appid
  sub_mchid 特约商户的商户号
  key: 服务商的密钥
  证书: 服务商的证书
  c. 对于没有绑定特约商户appid,公众号支付的统一下单接口传如下参数:
  mchid 服务商商户号
  appid 服务商的appid
  openid 用户在服务商appid下的openid(授权获取用户信息接口)
  sub_mchid 特约商户的商户号
  key: 服务商的密钥
  证书: 服务商的证书
  8. 针对6.2中提到的绑定特约商户appid,哪些情况下需要绑定appid?接口如何传?
  a. 哪些情况下需要绑定appid?
  一定需要获取用户在特约商户服务号(sub_appid)下的openid。
  常见的情况有2种:
  一是商户需要用这个openid和自己的CRM打通,
  二是很多商户都用一个服务号运营,为了方便运营需要拿到用户在这个服务号下的openid
  b. 绑定的时候遇到提示主体不一致?
  服务商在绑定的时候,也是需要绑定的服务号appid和特约商户的主体一致的,如果不一致会提示主体不一致的错误。
  遇到这个错误找对接的商务经理解决, 需要签署额外的联合运营函
  c. 有些极端的情况,一个特约商户号,绑定多个appid(可能商户希望运营到不同的服务号,这种情况也是允许的,不过比较少见,不建议这么做)
  d. 对于绑定了特约商户appid,刷卡支付和扫码支付接口传如下参数:
  mchid 服务商商户号
  appid 服务商的appid
  sub_appid 特约商户的appid
  sub_mchid 特约商户的商户号
  key: 服务商的密钥
  证书: 服务商的证书
  此时,提交刷卡支付的微信回复里,会返回sub_openid (商户在特约商户sub_appid下的openid)
  e. 对于绑定了特约商户appid,公众号接口传如下参数:
  mchid 服务商商户号
  appid 服务商的appid
  sub_appid 特约商户的appid
  sub_openid 用户在特约商户sub_appid下的openid(授权获取用户信息接口)
  sub_mchid 特约商户的商户号
  key: 服务商的密钥
  证书: 服务商的证书
  9. 服务商在商户平台申请开通的特约商户,这些特约商户本身是没有普通微信支付权限的服务商本身自己也是没有普通微信支付权限的
  10. 结算和退款
  结算: 资金默认结算到特约商户的对公账户
  退款: API接口退款权限和商户平台页面退款权限都默认在子商户身上。
  如果需要服务商用接口发起退款的权限,请联系商务经理,需要签署额外的协议.
  11. 服务商模式发红包
  服务商模式发红包是指,钱在子商户的微信账户上,而受理商代发红包
  目前这个功能也需要向商务经理申请,请咨询各自对接的商务经理
&&相关文章
&&月点击排行这个系列将详细描述用PHP开发一个微信支付的扫码支付和刷卡支付的demo.
本教程的demo基于目前微信提供的PHP demo (地址: ). 所以本教程会详解微信提供的PHP demo,
可以在微信里访问
来查看这个demo(可以把这个链接在微信里发给自己,然后打开)。
在微信中打开
输入金额,点击微信支付
会有2种方式,分别是扫码支付 和 刷卡支付
扫码支付长摁二维码可以识别支付
刷卡支付会通过JSSDK的API调起微信的扫一扫功能,需要扫另一部手机的二维码.
第一篇先描述接入的准备工作. 每一步我都列出了注意点
1. 账号准备
申请服务号
申请服务号认证(需要300人民币,不是微信收取,第三方公司收取)
申请微信支付
在此过程中遇到问题请联系客服或者商务经理, 也可以联系我解决
2. 开发准备
云服务器(比如阿里云,腾讯云)
由于域名备案时间较长,建议和第一步并行进行
2.4 安装PHP 和 apache2
建议用户购买Linux云服务器的操作系统是ubuntu, 软件安装方便,下面以ubuntu操作系统为例介绍.
Linux安装PHP:
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install libapache2-mod-php5
sudo /etc/init.d/apache2 restart
有可能80端口已经被占用,用以下命令确认:
sudo lsof -i :80
2.5 apache配置, 以下是apache配置的基础知识
区别于Windows 下apache,Linux配置文件通常只有一个,就是httpd.conf。
Linux下 Apache的配置文件是 /etc/apache2/apache2.conf,Apache在启动时会自动读取这个文件的配置信息。而其他的一些配置文件,如 httpd.conf等,则是通过Include指令包含进来。
在apache2.conf里有sites-enabled目录,而在 /etc/apache2下还有一个sites-available目录,其实,这里面才是真正的配置文件,而sites- enabled目录存放的只是一些指向这里的文件的符号链接,你可以用ls /etc/apache2/sites-enabled/来证实一下。
所以,如果apache上配置了多个虚拟主机,每个虚拟主机的配置文件都放在 sites-available下,那么对于虚拟主机的停用、启用就非常方便了:
当在sites-enabled下建立一个指向某个虚拟主机配置文件的链 接时,就启用了它;如果要关闭某个虚拟主机的话,只需删除相应的链接即可,根本不用去改配置文件。
在Ubuntu上安装Apache,每次重启,都会出现以下错误提示:
Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
修改 httpd.conf 文件,打开终端,输入以下命令:
sudo vim /etc/apache2/httpd.conf
默认情况下,这个是一个空文件,在文件中加入以下内容:
ServerName localhost
ubuntu下为php安装curl库
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
#/etc/init.d/apache2 restart
apache的log日志通常在以下目录
/var/log/apache2/error.log
根据这篇文章的步骤,可以让你的账号跑通android app的微信支付.
前提:已经有开通微信支付,有商户号,密钥.
点击图片可以打开大图查看.
1. 下载Android app Demo
以下是接入微信支付通常的流程:
1. 申请服务号(必须企业为主体)
2. 服务号认证(300 RMB)
3. 登录公众平台按照指引申请微信支付
4. 微信支付申请成功,收到通知邮件,获得appid,mch_id,商户平台用户名密码信息等
5. 在商户平台-&账户设置-&安全设置-&API安全中设置key
6. 在微信支付的4种模式中,选择合适的模式,开发微信支付功能
如果之前没有成功的交互,首先检查程序是否错误
1. 使用 微信的在检查签名是否和程序生成的一致
2. 如果和微信的在线签名工具一致,说明程序没有错误,确定是API密钥错误(被别人改动或者记错了)
在商户平台的账户信息中更改API密钥(账户设置-安全设置-API安全), 15分钟后生效
3. 如果和微信的在线签名工具不一致,说明程序有错误,常见的错误可能是:
编码问题,确保所有的都是utf-8的. 如果有中文, 可以先把中文改成英文重新签名,看是否签名错误,如果英文不会错中文才会错,基本肯定是编码问题
3.2: 消息中字段大小写和文档中完全一致
3.3: XML中标签不能有空格
现在微信摇一摇周边越来越火了,这篇文章详细介绍iBeacons.
iBeacons到底是什么?
iBeacons 是2013年WWDC上苹果推出一项精准微定位技术,被称作NFC杀手,是苹果进军零售业的秘密武器。iBeacons 基于 Bluetooth LE 技术,全称为 Bluetooth Low Energy(低功耗蓝牙),又可简称为 BLE。 低功耗蓝牙由诺基亚在2001年开始研发,其目的是为了发展一套相容于标准蓝牙,并且在功耗与制造价格上能进一步优化的标准。2004年Nokia发布了低功耗蓝牙标准,2006年以Wibree技术的品牌名称首度问世,2007年与蓝牙技术联盟蓝牙技术联盟达成协议,并入标准蓝牙并正式定名为低功耗蓝牙。当你的设备(支持低功耗蓝牙的设备比如手机)靠近一个iBeacons基站时,设备就能够扫描到iBeacons广播的信号。
JSAPI支付由于涉及到支付目录,以及获取openid,开发者遇到问题比较多,请逐条check以下几条:
1. key已经被改变, 被扫支付还是会提示: 原生支付URL参数错误
2. 支付目录是否正确
发起支付的目录必须就在当前目录下,默认可以设置3个,如果需要更多,可以联系我们内部申请.
不要和测试目录重复
修改支付目录,15分钟生效
支付目录大小写敏感,必须大小写完全一致
支付目录的路径是以”/”区分,在url里不要有特殊字符或者”//”
一、 现金红包简介
微信红包,2014年春节一经推出即受到广大用户好评,引发全民抢红包热潮。现将微信红包打造成“现金红包”,成为一款定向资金发放的营销工具,供商户使用.
二、 什么商户有资格申请
只要您开通了微信支付,并使用新支付接口开发(公众号支付、刷卡支付),都可以使用现金红包,无需申请
备注:新支付接口开发使用MCHID、支付密钥,不再使用Paysignkey
基本操作:
a,d,x,i,o,daw,vaw,ww,yy,p C-v,Shift-v
通用操作:
format文件: gg=G
没有行号: set nonu
split:窗口: sp 文件名
split窗口中跳动: ctrl+w w
竖着split: vs
复制代码的时候不会复制// :set comments-=://
:res(ize) num 例如::res 5,显示行数调整为5行
:res(ize)+num 把当前窗口高度增加num行
:res(ize)-num 把当前窗口高度减少num行
VIM 提供了很多进入插入模式的命令:
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
vim -p 要编辑的文件名
多个标签间进行切换时向右切换gt,向左切换用gT
在编辑的时候想增加一个标签就可以:tabnew filename
:tabc 关闭当前的tab
:tabs 查看所有打开的tab
在当前行里面有效的移动光标:
fx:移动光标到当前行的下一个 x 处。x 可以是任意一个字母,可以使用 ; 来重复上一个 f 命令。
tx:和上面的命令类似,但是是移动到 x 的左边一个位置
Fx:和 fx 类似,不过是往回找。
w:光标往前移动一个词。
b:光标往后移动一个词。
0:移动光标到当前行首。数字0
^:移动光标到当前行的第一个字母位置。
$:移动光标到行尾。
):移动光标到下一个句子。
( :移动光标到上一个句子。
[[ 转到上一个位于第一列的“{”(有时候不对)
]] 转到下一个位于第一列的“{”(有时候不对)
{ 转到上一个空行
} 转到下一个空行
c{motion}:
删除 motion 命令跨过的字符,并且进入插入模式。
比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。
ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。
在整个文件里面有效移动光标,在文件里面移动的命令:
:向下移动一屏。
:向上移动一屏。
G:到文件尾
numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
gg:到文件首
H:移动光标到屏幕上面
M:移动光标到屏幕中间
L:移动光标到屏幕下面
*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。
?text:和上面类似,但是是反方向。
ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它
使用关键词自动完成功能,你只需要输入开始几个字母(比如 iAmAL),然后按 (按住 Ctrl,再按 N)或者 。
和,保留光标位置使屏幕上下滚动
有效的移动大段的文本:
v:按字符选择。经常使用的模式,所以亲自尝试一下它。
V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。
:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。
在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。
d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
c:剪贴选择的内容到剪贴板并且进入插入模式。
d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。
y{motion}:和上面类似,不过是拷贝。
c{motion}:和 d{motion} 类似,不过最后进入插入模式。
dd:剪切当前行。
yy:拷贝当前行。
10yy: 拷贝10行
cc:剪切当前行并且进入插入模式。
D:剪切从光标位置到行尾到剪贴板。
Y:拷贝当前行。
C:和 D 类似,最后进入插入模式。
x:剪切当前字符到剪贴板。
s:和x类似,不过最后进入插入模式。
下面是我常用的一些命令, 放在这里供我备忘:
% 跳转到配对的括号去
[[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
gD 跳转到局部变量的定义处
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
`x 跳转到书签处("`"是1左边的键)
& 增加缩进,"x&"表示增加以下x行的缩进
& 减少缩进,"x
:A 在新Buffer中切换到c\h文件
:AS 横向分割窗口并打开c\h文件
:AV 纵向分割窗口并打开c\h文件
:AT 新建一个标签页并打开c\h文件
cscope -Rbq
add : Add a new database (Usage: add file|dir [pre-path] [flags])
“cscope find”的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
, 光标会自动跳到函数定义
Ctrl-t返回
命令跳转: ta functionname
MiniBuffer:
把光标置于这个窗口时, 有下面几个快捷键可以用:
向前循环切换到每个buffer名上
向后循环切换到每个buffer名上
在打开光标所在的buffer
d 删除光标所在的buffer
let g:miniBufExplMapCTabSwitchBufs = 1
向前循环切换到每个buffer上,并在但前窗口打开
向后循环切换到每个buffer上,并在但前窗口打开
let g:miniBufExplMapWindowNavVim = 1
则可以用切换到上下左右的窗口中去,就像:
C-w,h j k l 向”左,下,上,右”切换窗口.
let g:miniBufExplMapWindowNavArrows = 1
是用切换到上下左右窗口中去
最近几个月都在负责一个服务器进程录制和回放相关的工具,这个工具的作用就是录制实际外网运行的进程信息保存下来(linux),然后在本地的服务器上回放这个进程.
本文简单描述下,服务器进程录制回放技术的原理,因为涉及到别人的专利,不谈具体如何实现。本文不谈多线程的录制和回放.
首先假设我们的进程是这样的程序:
int main()
while(1)
cout&&&Hello World&&&endl;
sleep(1);
显然这段程序我们根本不需要录制,就能回放,因为这个进程每次运行的结果都是一样的.
如果我们的进程是这样的程序:
int main()
while(1)
cout&&i&&endl;
sleep(1);
那么为了回放的时候和录制的时候完全一样,那么我们需要把输入的i这个的序列全部保存下来,
回放的时候再把当时录制的i返回给进程。
为了达到这样的目的,我们需要用进程注入的方式改变进程的二进制,改变后的伪代码如下:
int main()
while(1)
if(录制)
vec.push_back(i);
else if(回放)
i = vec.pop();
cout&&i&&endl;
sleep(1);
如果是录制的时候(也就是外网运行的时候),把i保存下来,这里的保存不仅是保存到当前内存,而且要序列化到文件或者数据库。
如果是回放的时候,那么把i从文件或者数据库里读出来。
理论上讲,进程的录制和回放的本质原理就是这么简单,但是事实上要考虑的方方面面很多。因为很显然,录制进程的时候需要把他的外部
输入都录制下来,在回放的时候需要在合适的时候发给运行的进程。
对于进程的输入信息,主要有以下这些数据需要保存:
1. socket接收到的数据
2. 调用的时间需要保存下来
3. 进程的signal信号
5. 读取文件
6. 标准输入
7. 共享内存
在注入进程保存以上信息的时候,其实有不少需要注意的:
对于随机数,如果是单进程录制,只需要录制种子,因为随后的序列完全一样
对于文件的读取,如果文件的大小非常大,而这个文件又是不会变更的,那么这个文件完全没必要保存,回放的时候读取原文件
如果有进程间内存共享,对于单进程只支持一个写一个读,并且不能内存覆盖。原因很简单,如果A进程读取的共享内存,会随时被B进程改写,那我们
就要把共享内存动态地保存下来,这个数据量非常大。如果共享内存不会覆盖,那只需要保存被改变的共享内存。
对于上面保存的数据,理论上,回放的时候是和录制时候完全一样的被进程使用,在进程回放完的时候,所有这些数据都被读完。为了在回放过程中及时报告
回放的正确性,需要在进程读取这些数据的时候,进行校验。比如说文件名的校验,文件内存的校验。
但是,是不是保存了上面这些数据,就可以了呢?事实上还有很多事情要做:
就算没有涉及进程的输入,程序本身的执行输入输出也可能略有区别:
比如libc的readdir函数,在录制的时候返回的目录,和你在本地服务器上返回的目录不一定完全一样,这和函数的实现有关
假设有一个栈上的变量没有初始化,那么录制时候这个变量的值和回放时候变量的值很有可能不一样,那么进程的回放和录制可能逻辑不一样了。
这其实也是进程录制和回放的一个作用,发现未初始化的问题
录制和回放有什么作用?
1. 发现上面说的栈上变量未初始化问题
2. 可以多次回放,GDB上去,重现外网的各种场景,进行bug调试
3. 通过使用vtune等工具,抓取外网真实环境的性能数据
这是linux进程录制回放技术的原理,没有涉及多线程. 把这个原理落地到实际的产品需要考虑的东西更多:
1. 保存的数据流量对服务器的影响?如何压缩?
2. 数据传输到本地服务器,序列化以及保存的格式?
3. 各种类型的数据是保存在一起?还是分开保存?需不需要区分数据类型?
4. 如何校验数据是否和录制是完全一致?如何第一时间发现回放时候的错误?
5. 回放出错时候,怎么才能更快的找到原因?怎么确认是录制回放工具的问题还是进程未初始化的问题?
6. 怎么支持多个服务器的同时分布式录制?
7. 很显然这套系统需要在程序一开始就初始化好?通过什么方式初始化?
8. 如果进程运行了几天,怎么才能从某个时点开始回放而不依赖前面的数据?
1. PIN是一款intel公司开发的动态二进制开发框架,这套框架的上层是开源,但是底层的汇编没有开源.
2. PIN是跨平台的,支持windows,linux,同时支持32位64位.
3. PIN是基于动态插桩的。
4. 动态插桩的好处: a)不需要为了插桩先跑一遍插桩程序 b)可以给动态库和自动生成的代码插桩 c)插桩可以随时打开停止 d)可以给正在运行的程序插桩
5. PIN的插桩不会导致源程序的code address, data address和内存内容的改变
6. 使用C,C++或者asm编写代码
7. PIN插桩的粒度有两种,第一种是Just-in-time,在第一次执行到的时候插桩,支持instruction和basic blocks. 第二种是Ahead-of-time instruction,在第一次load
的时候插桩,支持Image和Routine
8. 性能也是一个重点的关注点,一个BB的统计,性能损耗在30%左右
9. 可以运行时打开pin tool, pin –pid 12345 –t inscount0
10 pintool 本身也可以通过gdb debug
微信支付@腾讯

我要回帖

更多关于 微信支付商户号 mchid 的文章

 

随机推荐