Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FMVIPAPI
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
FMVIPAPI
Commits
2788d4ea
Commit
2788d4ea
authored
Jan 25, 2018
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
补充Java版添加请求头示例
parent
6c082781
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
113 additions
and
19 deletions
+113
-19
非码会员客户端与POS对接文档 V2.0.2.md
+113
-19
No files found.
非码会员客户端与POS对接文档 V2.0.
1
.md
→
非码会员客户端与POS对接文档 V2.0.
2
.md
View file @
2788d4ea
# 非码会员客户端与POS对接文档 V2.0.1
# 非码会员客户端与POS对接文档 V2.0.2
# 非码会员客户端与POS对接文档 V2.0.1
# 非码会员客户端与POS对接文档 V2.0.2
[
TOC
]
[
TOC
]
...
@@ -17,26 +17,53 @@
...
@@ -17,26 +17,53 @@
#### 消息头构成说明:
#### 消息头构成说明:
>一个固定值(0x4d46) + 版本号(0x2) + 本次请求数据长度
>一个固定值(0x4d46) + 版本号(0x2) + 本次请求数据长度
#### 带消息头的请求构造举例:
#### 带消息头的请求构造示例:
-
将名为 FMSOCKHEADER 结构体类型的消息头添加到原始请求数据的开头,将新生成的数据作为请求数据发送给会员客户端。
-
FMSOCKHEADER 结构体声明如下:
-
C/C++代码:
```
cpp
```
cpp
/**
*@brief FMSOCKHEADER
* 消息头结构体
*/
typedef
struct
{
typedef
struct
{
unsigned
int
flag
;
// 固定值 0x4d46
unsigned
int
flag
;
// 固定值 0x4d46
unsigned
int
ver
;
//
版本号
0x2
unsigned
int
ver
;
//
固定值
0x2
unsigned
int
len
;
// 原始请求数据的数据长度
unsigned
int
len
;
// 原始请求数据的数据长度
}
FMSOCKHEADER
;
}
FMSOCKHEADER
;
```
-
代码示例:
/**
* @brief GetAddHeaderReqDataLength
* 获取添加消息头后的数据长度
* @param originData
* 原始请求数据
* @return
*/
unsigned
int
GetAddHeaderReqDataLength
(
const
char
*
originData
)
{
int
originLen
=
strlen
(
originData
);
//获得原始数据长度
return
originLen
+
sizeof
(
FMSOCKHEADER
);
}
```
cpp
/**
// eg:
* @brief GetAddHeaderReqData
// 获得POS生成的JSON格式请求数据
* 获取添加消息头后的数据
* @param originData
* 原始请求数据
* @param addHeaderReqData
* 预留的存储添加过消息头的请求数据指针
* @param addHeaderReqDataLength
* 添加过消息头后的数据长度,可用GetAddHeaderReqDataLength()函数获得
* @return
*/
int
GetAddHeaderReqData
(
const
char
*
originData
,
char
*
addHeaderReqData
,
unsigned
int
addHeaderReqDataLength
)
{
int
originLen
=
strlen
(
originData
);
//获得原始数据长度
char
*
originData
=
posReqJson
.
data
();
// 获得原始数据
int
newReqDataLength
=
originLen
+
sizeof
(
FMSOCKHEADER
);
int
originLen
=
posReqJson
.
length
();
//获得原始数据长度
if
(
addHeaderReqDataLength
<
newReqDataLength
)
{
return
0
;
}
// 设置消息头的值
// 设置消息头的值
FMSOCKHEADER
header
=
{
0
,
0
,
0
};
FMSOCKHEADER
header
=
{
0
,
0
,
0
};
...
@@ -44,13 +71,78 @@ typedef struct {
...
@@ -44,13 +71,78 @@ typedef struct {
header
.
len
=
originLen
;
header
.
len
=
originLen
;
header
.
ver
=
0x2
;
header
.
ver
=
0x2
;
// 声明一个新的数据指针
// 在原始数据前加消息头
char
*
newReqData
=
new
char
[
originLen
+
sizeof
(
FMSOCKHEADER
)];
memset
(
addHeaderReqData
,
0
,
newReqDataLength
);
memset
(
newReqData
,
0
,
originLen
+
sizeof
(
FMSOCKHEADER
));
memcpy
(
addHeaderReqData
,
&
header
,
sizeof
(
FMSOCKHEADER
));
// 将消息头拷贝至addHeaderReqData
memcpy
(
newReqData
,
&
header
,
sizeof
(
FMSOCKHEADER
));
// 将消息头拷贝至newReqData
memcpy
(
addHeaderReqData
+
sizeof
(
FMSOCKHEADER
),
originData
,
originLen
);
//将原始数据追加到addHeaderReqData
strcat
(
newReqData
,
originData
);
//将原始数据追加到newReqData
// 向会员客户端发送newReqData
return
newReqDataLength
;
}
// 在你的代码中构造原始请求数据,调用以下代码获取添加消息头的请求数据
// Your code.
int
addHeaderDataLength
=
GetAddHeaderReqDataLength
(
ptr
);
// 获取添加消息头后的数据长度
char
*
addHeaderData
=
new
char
[
addHeaderDataLength
];
// 声明存储添加消息头后的数组
GetAddHeaderReqData
(
ptr
,
addHeaderData
,
addHeaderDataLength
);
// 获取添加消息头后的数据
// Your code.
```
-
Java代码:
```
java
/**
* @brief GetAddHeaderReqDataBytes
* 在请求数据前添加消息头
* @param reqData
* 原始请求数据
* @return
* 添加过消息头的数据
*/
byte
[]
GetAddHeaderReqDataBytes
(
String
reqData
)
{
try
{
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
DataOutputStream
dos
=
new
DataOutputStream
(
baos
);
// 添加FM字符
dos
.
write
(
'F'
);
dos
.
write
(
'M'
);
byte
[]
b1
=
new
byte
[
4
];
System
.
arraycopy
(
baos
.
toByteArray
(),
0
,
b1
,
0
,
baos
.
size
());
baos
.
reset
();
//添加版本号
dos
.
write
(
2
);
byte
[]
b2
=
new
byte
[
4
];
System
.
arraycopy
(
baos
.
toByteArray
(),
0
,
b2
,
0
,
baos
.
size
());
baos
.
reset
();
//添加请求数据的长度
int
reqDataLen
=
reqData
.
getBytes
().
length
;
dos
.
writeInt
(
reqDataLen
);
byte
[]
b3
=
new
byte
[
4
];
System
.
arraycopy
(
baos
.
toByteArray
(),
0
,
b3
,
0
,
baos
.
size
());
baos
.
reset
();
// for (int i = 0; i < 4; i++) {
// b3[i] = (byte)((reqDataLen >> 8 * i) & 0xff);
// }
//消息头和请求数据合并
byte
[]
bytes
=
new
byte
[
12
+
reqDataLen
];
System
.
arraycopy
(
b1
,
0
,
bytes
,
0
,
4
);
System
.
arraycopy
(
b2
,
0
,
bytes
,
4
,
4
);
System
.
arraycopy
(
b3
,
0
,
bytes
,
8
,
4
);
System
.
arraycopy
(
reqData
.
getBytes
(),
0
,
bytes
,
12
,
reqDataLen
);
return
bytes
;
}
catch
(
Exception
ex
){
System
.
out
.
println
(
ex
.
getMessage
());
ex
.
printStackTrace
();
}
byte
[]
bytes
=
new
byte
[
0
];
return
bytes
;
}
```
```
## 常见使用场景举例
## 常见使用场景举例
...
@@ -426,5 +518,6 @@ typedef struct {
...
@@ -426,5 +518,6 @@ typedef struct {
| ----- | ------- | ------- |
| ----- | ------- | ------- |
| V2.0.0 | 2017-10-24 09:59 | 创建2.0版本文档 |
| V2.0.0 | 2017-10-24 09:59 | 创建2.0版本文档 |
| V2.0.1 | 2017-12-29 16:00 | 修改支付条码字段名为barcode |
| V2.0.1 | 2017-12-29 16:00 | 修改支付条码字段名为barcode |
| V2.0.2 | 2018-01-12 12:30 | 补充Java版添加请求头示例 |
[
^fmPay
]:
非码支付(非码收银),统一收银服务。详见[www.freemud.cn](http://www.freemud.cn/service.html)
[
^fmPay
]:
非码支付(非码收银),统一收银服务。详见[www.freemud.cn](http://www.freemud.cn/service.html)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment