新商户证书

This commit is contained in:
mactj 2021-01-22 18:55:34 +08:00
parent 25f19576a3
commit 44d8a0c9c1
14 changed files with 161 additions and 65 deletions

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID7DCCAtSgAwIBAgIUbDT71zU75w5Z4yw5CWCfJLSdY4swDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjEwMTIyMDkyMzA4WhcNMjYwMTIxMDkyMzA4WjB+MRMwEQYDVQQDDAox
NjA1OTQ5MTU2MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xKjAoBgNVBAsM
IeWugeWkj+mcsuWNjua1k+mFkuS4muaciemZkOWFrOWPuDELMAkGA1UEBgwCQ04x
ETAPBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAoGdajHnrQQqVIr0fxt1pcP/J/SAAf5JYdQS2bkgZCsn6mzTX52NTiz5TKPDs
4Nt6BAD6ObLGMMDBiIzqI9olf6wBqpkjVSfofDdv/tQTYohVrSyNJiSlhfohqYVj
9X0pPkGKaNyqrxXnUHdW66VqDh1njQL8HyrIQXF0rKWJwz5YfMxNSrduY1YnBnIP
rU7Od6w/CRHnO51aHNldwaZ0MT6QJAkHy9VkW6cIIxRzZGOJFR54PS9xm39rrWZn
tAU8F7hg8gufZCDoX0g7X+5pXep7bIMgU78TGVLZr0/IUQaVyMHLF8Gs2NrjV/P1
NtOzclnM++13IxCXj9I4O5MzzQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8E
BAMCBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNu
L3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0
NkMwMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQBy9i1tNQ2mIbY7w+m2OC6U
cygVVozbh0+q2ej97JQ9WbE4Fl+0OVVedzG7GjEadRP3ji/wu+lVIPxjw2rnpS2a
riDGeS0oGC+8Sjz3W+aOKToNcb2j6W9KJU1kttvf+98U9Cf8vR8c2/ow/8kdaGJE
NRGjIlR2kwbQZFSv/mBypwqDIwNCT2Z73tx2QMnkLqFRqzO/lqnVGfIraaL/+SCd
rnDOTCtL9SnzQiHMQwx/kWtI641y4EV4UAnJKawbR8L90ely751sNuOMLWs+Xzgg
qIsvvfVshkueM9ZyseksRO8GVFSF4njk1iwiSsfGTQpj1PvWFT9pOHAODSTtM0VL
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCgZ1qMeetBCpUi
vR/G3Wlw/8n9IAB/klh1BLZuSBkKyfqbNNfnY1OLPlMo8Ozg23oEAPo5ssYwwMGI
jOoj2iV/rAGqmSNVJ+h8N2/+1BNiiFWtLI0mJKWF+iGphWP1fSk+QYpo3KqvFedQ
d1brpWoOHWeNAvwfKshBcXSspYnDPlh8zE1Kt25jVicGcg+tTs53rD8JEec7nVoc
2V3BpnQxPpAkCQfL1WRbpwgjFHNkY4kVHng9L3Gbf2utZme0BTwXuGDyC59kIOhf
SDtf7mld6ntsgyBTvxMZUtmvT8hRBpXIwcsXwazY2uNX8/U207NyWcz77XcjEJeP
0jg7kzPNAgMBAAECggEALEI4Tth5HBoyakJq2TFQnbhGYIyK9qhHtgoV2DoWhs6S
Um7zP8o9TAdnZL2NbsHAWgh3AqKcYulcvTO8iyXvANpSH2Nfx2hakqOtSE/2BVL+
6OiJDcRA08Xfsem3Wg4t6hqleSeiBOtzRtWW6zBaIgjlAJiZPnRMixomClkmuPMz
9oVy4JPy1vunYRfswwEcqa50NJkxqTBHZttrr2+9QKmnShc/kcsb7Okof7hUpJ70
p0TOiJC0FdUnqhozI4GZcYXgMXW9CNDOywBl7Y3r/7nEcW4dJgZSG6+juUs4ntF7
xpHL8Zk5XxxWgI6zc5mHrd5H/0bSJugQpseiKrw71QKBgQDVffyMYfoHO49A6Zur
dxZkJBhpqYeMeMtXuFm23FdkOo4DhM4j2J2TkxUEdhZEGIUeh42+RBLcmND3n6wE
zCfcv/VbiUxP3uimjR1MS5aYXgMFjrVtbfihP5mJ4zq5ipdVjKtGAA8pZsCREEUa
ar9Guzn5//XUsqqCWgOlnYp+0wKBgQDAV18dgmM7QXNeJydQiN7SHSuyVYL9P734
Crti9WY2ntx+Pf4XVtSxT/O4Q3Dvj/9phC/acaBYfwEb0uwLpYAtkLXuEuLsKLwT
9IYeqWATg5EoRPivbVl9syK378XO8OAohWYPfDkwWpedpy7RtESgB1LuwJTen8PL
PgrPr2Ye3wKBgFAsHsINLRq4OCS1VZs/fm4ey/gqDNgoqJwJg89S0ZK3FoulvM/j
UdGQg20Id3YdCyia2RThdX/X92l2Ud//VtzkTVyRo9G+sPmStrTnEeeoLlRQ8jrk
+GB9hMguR+hTbl9XEx6XeRogFyKizICOI8SJHM2QXJ4Cdlu7N/Fixxa3AoGAFhNx
JU/r18dBWJMh3gp3mKIke8l4yVxhj3Cb5VXJL4e4Qv0WhtM+gkNs87853SUn6ZJ0
c5wLDV02YV0qHoQWXCR53SNpzDU4sQmlwyspjdPR+08/Q9NHLDg9SeNJTuEyuTPm
bOyTG8uqDzw7EXKhVcTBbgnIjGzF6jPqxb+Z9v0CgYEAmsek53w4UJyR9TsKI//c
pEVokUCt/Ntm1CQkSbdYPx1JZnhMNYBkhfsB8yNPMZ+kh73qbk/Wz4iQzoO4THU2
UI122PNGSkzIplqGcTF9LmJXzW5FRuRZ18Aa2gDcshpOrevk2HIwp/WWa5DqENaX
fL8BpgJsNOYfriXUYJciBts=
-----END PRIVATE KEY-----

View File

@ -0,0 +1,18 @@
欢迎使用微信支付!
附件中的三份文件证书pkcs12格式、证书pem格式、证书密钥pem格式,为接口中强制要求时需携带的证书文件。
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
不同开发语言下的证书格式不同,以下为说明指引:
证书pkcs12格式apiclient_cert.p12
包含了私钥信息的证书文件为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份
部分安全性要求较高的API需要使用该证书来确认您的调用身份
windows上可以直接双击导入系统导入过程中会提示输入证书密码证书密码默认为您的商户号1900006031
证书pem格式apiclient_cert.pem
从apiclient_cert.p12中导出证书部分的文件为pem格式请妥善保管不要泄漏和被他人复制
部分开发语言和环境不能直接使用p12文件而需要使用pem所以为了方便您使用已为您直接提供
您也可以使用openssl命令来自己导出openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
证书密钥pem格式apiclient_key.pem
从apiclient_cert.p12中导出密钥部分的文件为pem格式
部分开发语言和环境不能直接使用p12文件而需要使用pem所以为了方便您使用已为您直接提供
您也可以使用openssl命令来自己导出openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
备注说明:
由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书, 2018年3月6日后, 不再提供CA证书文件rootca.pem下载

View File

@ -80,9 +80,6 @@ public class AppOrderController extends BaseController {
public TableDataInfo list(AppOrder appOrder) {
startPage();
LambdaQueryWrapper<AppOrder> lqw = Wrappers.lambdaQuery(appOrder);
if (appOrder.getDeptId() != null) {
lqw.eq(AppOrder::getDeptId, appOrder.getDeptId());
}
if (appOrder.getUserId() != null) {
lqw.eq(AppOrder::getUserId, appOrder.getUserId());
}
@ -175,7 +172,7 @@ public class AppOrderController extends BaseController {
public AjaxResult add(@RequestBody AppOrder appOrder, HttpServletRequest req) {
Long userId = getLoginUser().getUser().getUserId();
String username = getUsername();
Long deptId = getDeptId();
String id = System.currentTimeMillis() + RandomUtil.randomNumbers(6);
@ -191,7 +188,6 @@ public class AppOrderController extends BaseController {
appOrder.setPostAddress(address.getAddress());
appOrder.setId(id);
appOrder.setDeptId(getDeptId());
appOrder.setUserId(userId);
// 计算总金额
@ -201,7 +197,8 @@ public class AppOrderController extends BaseController {
GoodsMain goods = goodsMainService.getById(detail.getGoodsId());
detail.setUserId(userId);
detail.setOrderId(id);
detail.setDeptId(deptId);
// 使用产品对应酒庄id
detail.setDeptId(goods.getDeptId());
detail.setStatus(0);
detailService.save(detail);
totalFee += (goods.getGoodsPrice().multiply(new BigDecimal(100)).intValue() * detail.getGoodsCount());

View File

@ -39,10 +39,6 @@ private static final long serialVersionUID=1L;
@TableId(value = "id", type = IdType.INPUT)
private String id;
/** 部门ID */
@Excel(name = "部门ID")
private Long deptId;
/** 用户ID */
@Excel(name = "用户ID")
private Long userId;

View File

@ -24,18 +24,18 @@ class MallApis {
})
}
getActivityList() {
return request.get({
url: baseUrl + 'winery/activity/open/list'
})
}
getHotSwitch() {
return request.get({
url: baseUrl + 'winery/activity/open/hotSwitch'
})
}
getActivityList() {
return request.get({
url: baseUrl + 'winery/activity/open/list'
})
}
getNotice() {
return request.get({
url: baseUrl + 'winery/activity/open/notice'

View File

@ -49,7 +49,6 @@
font-size: 12px;
color: #999;
display: flex;
}
.grid-item {

View File

@ -210,9 +210,12 @@ wxmini:
# secret: 94ee42c0899a6ceccf353e1e729c50d4 # 宁夏通
secret: dc55bc1729090bdff9b63e1a5f0d03b2 # 紫色名片
mchId: 1486984962
mchKey: 82aZ9Tb6eu5W2HdXKQWZU2SztU8w8nJ8
keyPath: "classpath:/cert/apiclient_cert1486984962.p12" # p12证书的位置可以指定绝对路径也可以指定类路径以classpath:开头)
# mchId: 1486984962
mchId: 1605949156
# mchKey: 82aZ9Tb6eu5W2HdXKQWZU2SztU8w8nJ8
mchKey: 2e7fe280d91ded48798365961db89951
# keyPath: "classpath:/cert/apiclient_cert1486984962.p12" # p12证书的位置可以指定绝对路径也可以指定类路径以classpath:开头)
keyPath: "classpath:/cert/apiclient_cert1605949156.p12" # p12证书的位置可以指定绝对路径也可以指定类路径以classpath:开头)
subAppId: #服务商模式下的子商户公众账号ID
subMchId: #服务商模式下的子商户号

View File

@ -1,5 +1,6 @@
import Vue from 'vue'
import {imageBaseUrl} from "@/settings";
import {listDept} from "@/api/system/dept";
Vue.filter('getImageForKey', val => {
@ -11,4 +12,31 @@ Vue.filter('getImage200', val => {
})
// 定义一个混入对象
export const CommonMixin = {
data() {
return {
deptOptions: []
}
},
created: function () {
listDept().then(r => {
this.deptOptions = r.data.filter(x => x.parentId === 300)
})
},
methods: {
// 商户类型字典翻译
deptFormat(row, column) {
if (this.deptOptions.length < 1) {
return ''
}
const dept = this.deptOptions.filter(x => x.deptId === row.deptId)[0]
return dept.deptName
}
}
}

View File

@ -254,13 +254,14 @@ import {
import UploadImage from '@/components/UploadImage/index'
import UploadImageMultiple from '@/components/UploadImageMultiple/index'
import CommonMixin from "@/mixin/common";
import Editor from '@/components/Editor/index';
import {listSpec} from "@/api/goods/goods_spec";
import {getDept, listDept} from "@/api/system/dept";
import {selectDictLabel} from "@/utils/ruoyi";
import * as settings from "@/settings";
import {imageBaseUrl} from "@/settings";
import {CommonMixin} from "@/mixin/common";
export default {
name: "GoodsMain",
@ -341,11 +342,7 @@ export default {
this.goodsTypeOptions = response.data;
});
listDept().then(r => {
this.deptOptions = r.data.filter(x => x.parentId === 300)
})
},
methods: {
inputGoodsFaceImg(fileName) {
@ -364,16 +361,6 @@ export default {
goodsTypeFormat(row, column) {
return this.selectDictLabel(this.goodsTypeOptions, row.goodsType);
},
//
deptFormat(row, column) {
if (this.deptOptions.length < 1) {
return ''
}
const dept = this.deptOptions.filter(x => x.deptId === row.deptId)[0]
return dept.deptName
},
/** 查询商品信息列表 */
getList() {
this.loading = true;

View File

@ -1,15 +1,18 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="部门ID" prop="deptId">
<el-input
v-model="queryParams.deptId"
placeholder="请输入部门ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
<el-form-item label="商户" prop="deptId">
<el-select v-model="queryParams.deptId" placeholder="请选择商户" clearable size="small">
<el-option
v-for="dict in deptOptions"
:key="dict.deptId"
:label="dict.deptName"
:value="dict.deptId"
/>
</el-select>
</el-form-item>
<el-form-item label="用户ID" prop="userId">
<el-input
v-model="queryParams.userId"
@ -126,13 +129,23 @@
<el-table-column label="部门ID" align="center" prop="deptId"/>
<el-table-column label="用户ID" align="center" prop="userId"/>
<el-table-column label="订单ID" align="center" prop="orderId"/>
<el-table-column label="商品ID" align="center" prop="goodsId"/>
<el-table-column label="退款时间" align="center" prop="goods" width="180">
<el-table-column label="商品名称" align="center" prop="goods" width="180">
<template slot-scope="scope">
<span>{{ goods.goodsName }}</span>
<span>{{ scope.row.goods.goodsName }}</span>
</template>
</el-table-column>
<el-table-column label="商品单价" align="center" prop="goods" width="180">
<template slot-scope="scope">
<span>{{ scope.row.goods.goodsPrice }}</span>
</template>
</el-table-column>
<el-table-column label="商品数量" align="center" prop="goodsCount"/>
<el-table-column label="合计金额" align="center" prop="goods" width="180">
<template slot-scope="scope">
<span>{{ scope.row.goods.goodsPrice * scope.row.goodsCount }}</span>
</template>
</el-table-column>
<el-table-column label="明细状态" align="center" prop="status" :formatter="statusFormat"/>
<el-table-column label="统一退单号" align="center" prop="refundNo"/>
<el-table-column label="退款时间" align="center" prop="refundTime" width="180">
@ -160,14 +173,14 @@
v-hasPermi="['winery:detail:edit']"
>修改
</el-button>
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['winery:detail:remove']"-->
<!-- >删除-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['winery:detail:remove']"-->
<!-- >删除-->
<!-- </el-button>-->
</template>
</el-table-column>
</el-table>
@ -225,10 +238,12 @@
<script>
import {listDetail, getDetail, delDetail, addDetail, updateDetail, exportDetail, refund} from "@/api/winery/detail";
import {CommonMixin} from "@/mixin/common";
export default {
name: "Detail",
components: {},
mixins: [CommonMixin],
data() {
return {
//
@ -305,8 +320,6 @@ export default {
this.loading = false;
});
},
//
statusFormat(row, column) {
return this.selectDictLabel(this.statusOptions, row.status);

View File

@ -1,14 +1,15 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="部门ID" prop="deptId">
<el-input
v-model="queryParams.deptId"
placeholder="请输入部门ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
<el-form-item label="商户" prop="goodsType">
<el-select v-model="queryParams.deptId" placeholder="请选择商户" clearable size="small">
<el-option
v-for="dict in deptOptions"
:key="dict.deptId"
:label="dict.deptName"
:value="dict.deptId"
/>
</el-select>
</el-form-item>
<el-form-item label="用户ID" prop="userId">
<el-input
@ -127,7 +128,8 @@
<el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="订单ID" align="center" prop="id" v-if="false"/>
<el-table-column label="订单ID" align="center" prop="id"/>
<el-table-column label="商户名称" align="center" prop="deptId" :formatter="deptFormat" width="100px"/>
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="收货人省市区" align="center" prop="postRegion" />
<el-table-column label="收货人地址" align="center" prop="postAddress" />
@ -241,9 +243,11 @@
<script>
import { listOrder, getOrder, delOrder, addOrder, updateOrder, exportOrder } from "@/api/winery/order";
import {CommonMixin} from "@/mixin/common";
export default {
name: "Order",
mixins: [CommonMixin],
components: {
},
data() {