新增:隐私协议设置

master
李春波 1 year ago
parent 29473ab1ee
commit f2add41a53
  1. 23
      app/admin/controller/MiniProgramController.php
  2. 17
      app/common/service/wechat/MiniProgram.php
  3. 18
      front/src/api/miniprogram.js
  4. 7
      front/src/views/authorizer/detail.vue
  5. 205
      front/src/views/authorizer/modules/privacy.vue

@ -141,4 +141,27 @@ class MiniProgramController extends BaseController
return json(['code' => $result['errcode'], 'msg' => $result['errmsg']]);
}
public function getPrivacy(Request $request)
{
$id = $request->post('id');
$privacyVer = $request->post('privacy_ver');
$row = Authorizers::where('id', $id)->find();
$miniprogram = new MiniProgram($row['platform_id']);
$privacy = $miniprogram->getPrivacy($row['appid'],$privacyVer);
$result['code'] = $privacy['errcode'];
$result['msg'] = $privacy['errmsg'];
$result['data'] = $privacy;
return json($result);
}
public function setPrivacy(Request $request)
{
$id = $request->post('id');
$privacy = $request->post('privacy');
$row = Authorizers::where('id', $id)->find();
$miniprogram = new MiniProgram($row['platform_id']);
$result = $miniprogram->setPrivacy($row['appid'],$privacy);
return json(['code' => $result['errcode'], 'msg' => $result['errmsg']]);
}
}

@ -217,4 +217,21 @@ class MiniProgram extends OpenPlatform
{
return $this->getMiniProgram($appid)->tester->unbind(null,$userStr);
}
/**
* 获取小程序隐私设置
* @param $appid
* @param int $privacyVer | 1: 现网版本 2: 开发版本
* @return mixed
*/
public function getPrivacy($appid, int $privacyVer = 2)
{
return $this->getMiniProgram($appid)->base->httpPostJson('cgi-bin/component/getprivacysetting', [ 'privacy_ver' => $privacyVer ]);
}
public function setPrivacy($appid, $privacy)
{
$privacy = json_decode($privacy,true);
return $this->getMiniProgram($appid)->privacy->set($privacy);
}
}

@ -14,6 +14,8 @@ const api = {
getTests: '/miniprogram/getTests',
bindTester: '/miniprogram/bindTester',
unbindTester: '/miniprogram/unbindTester',
getPrivacy: '/miniprogram/getPrivacy',
setPrivacy: '/miniprogram/setPrivacy',
}
export function getDetail(parameter) {
@ -118,4 +120,20 @@ export function unbindTester(parameter) {
method: 'post',
data: parameter
})
}
export function getPrivacy(parameter) {
return request({
url: api.getPrivacy,
method: 'post',
data: parameter
})
}
export function setPrivacy(parameter) {
return request({
url: api.setPrivacy,
method: 'post',
data: parameter
})
}

@ -8,9 +8,12 @@
<a-tab-pane key="2" force-render tab="信息配置">
<setting/>
</a-tab-pane>
<a-tab-pane key="3" force-render tab="体验者">
<a-tab-pane key="3" tab="体验者">
<tests/>
</a-tab-pane>
<a-tab-pane key="4" tab="隐私协议">
<privacy/>
</a-tab-pane>
</a-tabs>
</a-card>
</page-header-wrapper>
@ -20,10 +23,12 @@
import version from '@/views/authorizer/modules/version'
import setting from '@/views/authorizer/modules/setting'
import tests from '@/views/authorizer/modules/tests'
import Privacy from "@/views/authorizer/modules/privacy.vue";
export default {
name: 'Version',
components: {
Privacy,
version,
setting,
tests

@ -0,0 +1,205 @@
<template>
<div>
<a-form :form="form" v-bind="formLayout">
<a-card :bordered="false">
<div class="tips">
<p class="text">提示</p>
<p>- 参考步骤执行提交代码--->稍等(若小程序是首次提交代码后台需要些时间检测)--->get接口看下开发版本需要补什么信息(privacy_list中就是你用到的权限)---->set隐私(在下面表单中完善信息并提交ctrl+F搜把我换成具体用途填写自己的用途不用加"为了"这两个字)---->提交审核---->提交发布</p>
<p>- 参考文档<a target="_blank" href="https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/privacy-management/getPrivacySetting.html">获取小程序用户隐私保护指引</a>
<a target="_blank" href="https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/privacy-management/getPrivacySetting.html">设置小程序用户隐私保护指引</a>
</p>
<p>- 参考权限说明
UserInfo:用户信息微信昵称头像
Location:位置信息
Address:地址
Invoice:发票信息
RunData:微信运动数据
Record:麦克风
Album:选中的照片或视频信息
Camera:摄像头
PhoneNumber:手机号码
Contact:通讯录仅写入权限
DeviceInfo:设备信息
EXIDNumber:身份证号码
EXOrderInfo:订单信息
EXUserPublishContent:发布内容
EXUserFollowAcct:所关注账号
EXUserOpLog:操作日志
AlbumWriteOnly:相册仅写入权限
LicensePlate:车牌号
BlueTooth:蓝牙
CalendarWriteOnly:日历仅写入权限
Email:邮箱
MessageFile:选中的文件
ChooseLocation:选择的位置信息
Accelerometer:加速传感器
Compass:磁场传感器
DeviceMotion:方向传感器
Gyroscope:陀螺仪传感器
Clipboard:剪切板
</p>
<p>- 其他提示联系方式四选一sdk_privacy_info_list未做处理</p>
</div>
</a-card>
<a-card :bordered="false">
<a-form-item :wrapper-col="{ span: 12, offset: 6 }">
<a-row>
<a-col :span="8">
<a-button type="primary" @click="getProPrivacy">
查看现网版本
</a-button>
</a-col>
<a-col :span="8">
<a-button type="primary" @click="getDevPrivacy">
查看开发版本
</a-button>
</a-col>
<a-col :span="8">
<a-button type="primary" @click="createPrivacy">
根据开发版本配置生成隐私配置
</a-button>
</a-col>
</a-row>
</a-form-item>
</a-card>
<a-card :bordered="false" title="配置新的隐私保护指引">
<a-form-item label="协议内容">
<a-textarea rows="12" v-decorator="['newPrivacyData', {rules: [{required: false, message: '请输入名称'}]}]"/>
</a-form-item>
<a-form-item :wrapper-col="{ span: 12, offset: 10 }">
<a-button type="primary" @click="submit">
提交
</a-button>
</a-form-item>
</a-card>
</a-form>
<a-modal
:footer="null"
:visible="jsonDataVisible"
title="原始报文"
width="1000px"
@cancel="() => jsonDataVisible = false"
>
<json-viewer
:copyable="{copyText: '复制', copiedText: '复制成功'}"
:expand-depth='3'
:value="jsonData"
expanded
></json-viewer>
</a-modal>
</div>
</template>
<script>
import { getPrivacy, setPrivacy } from '@/api/miniprogram'
import JsonViewer from 'vue-json-viewer'
import data from "@/config/data";
import Message from "ant-design-vue/lib/message";
import {addPlatform} from "@/api/platform";
export default {
components: {
JsonViewer
},
data() {
return {
id: null,
jsonDataVisible: false,
jsonData: {},
devPrivacyData: {},
enumData: data,
formLayout: {
labelCol: {
xs: {span: 7},
sm: {span: 7},
lg: {span: 7}
},
wrapperCol: {
xs: {span: 10},
sm: {span: 10},
lg: {span: 10}
}
},
form: this.$form.createForm(this)
}
},
methods: {
getProPrivacy() {
this.jsonDataVisible = true
getPrivacy({id: this.id, privacy_ver: 1}).then(res => {
this.jsonData = res.data
})
},
getDevPrivacy() {
this.jsonDataVisible = true
getPrivacy({id: this.id, privacy_ver: 2}).then(res => {
this.jsonData = res.data
this.devPrivacyData = res.data
})
},
createPrivacy() {
if (Object.keys(this.devPrivacyData).length === 0){
Message.error('请先获取开发版隐私信息')
return
}
let jsonData = {
"setting_list":this.devPrivacyData.setting_list || [],
"owner_setting": {
"contact_phone": this.devPrivacyData.owner_setting.contact_phone,
"contact_email": this.devPrivacyData.owner_setting.contact_email,
"contact_qq": this.devPrivacyData.owner_setting.contact_qq,
"contact_weixin": this.devPrivacyData.owner_setting.contact_weixin,
"ext_file_media_id": this.devPrivacyData.owner_setting.ext_file_media_id,
"notice_method": this.devPrivacyData.owner_setting.notice_method || '公告'
},
"sdk_privacy_info_list": this.devPrivacyData.sdk_privacy_info_list || []
}
// privacy_list setting_list
let missingPrivacyItems = this.devPrivacyData.privacy_list.filter(item => {
// item setting_list
return !this.devPrivacyData.setting_list.some(setting => setting.privacy_key === item);
});
if (missingPrivacyItems.length > 0){
missingPrivacyItems.forEach(item => {
jsonData.setting_list.push({
"privacy_key": item,
"privacy_desc": '把我换成具体用途'
})
})
}
jsonData.setting_list.forEach(item => {
if (item.hasOwnProperty('privacy_label')) {
delete item.privacy_label;
}
});
this.form.setFieldsValue({newPrivacyData: JSON.stringify(jsonData)})
},
submit() {
this.form.validateFields((errors, values) => {
if (!errors) {
setPrivacy({id:this.id, privacy: values.newPrivacyData}).then(res => {
this.$message.success(res['msg'])
})
}
})
}
},
created() {
const {id} = this.$route.query
this.id = id
this.form.getFieldDecorator('newPrivacyData', {})
}
}
</script>
<style lang="less" scoped>
.tips {
padding: 20px;
background: #e6f7ff;
}
.text {
font-size: 18px;
}
</style>
Loading…
Cancel
Save