增加返回平台响应结果功能

master
李春波 2 years ago
parent 023395d865
commit d24ac6e9ac
  1. 6
      app/admin/model/Platform.php
  2. 9
      app/common/service/Forward.php
  3. 12
      app/wechat/controller/IndexController.php
  4. 2
      config/server.php
  5. 43
      front/src/views/platform/modules/CreateForm.vue
  6. 2
      front/vue.config.js
  7. 26
      install.sql

@ -52,6 +52,12 @@ class Platform extends PlatformModel
if ($data['is_default']) {
self::where('is_default', 1)->update(['is_default' => 0]);
}
if ($data['return_forward_platform']) {
self::where('return_forward_platform', 1)->update(['return_forward_platform' => 0]);
}
if ($data['return_forward_app']) {
self::where('return_forward_app', 1)->update(['return_forward_app' => 0]);
}
self::update($data);
} catch (\Exception $e) {
throw new BadRequestHttpException($e->getMessage());

@ -17,7 +17,7 @@ class Forward extends BaseServices
* @param Request $request
* @param $appid
* @param $type
* @return void
* @return bool|string
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
@ -50,6 +50,13 @@ class Forward extends BaseServices
$response = curl_exec($ch);
curl_close($ch);
self::writeLog($appid, $forwardUrl, $xml, $response);
if ($type == 'platform' && $forwardSetting['return_forward_platform']) {
return $response;
} elseif ($type == 'app' && $forwardSetting['return_forward_app']) {
return $response;
}
return false;
}
/**

@ -25,19 +25,25 @@ class IndexController
if ($appid) {
// 转发消息与事件推送请求给第三方
Forward::run($request, $appid, 'app');
$forwardResult = Forward::run($request, $appid, 'app');
// 消息与事件推送包括:设置小程序名称、添加类目、提交代码审核。审核结果会向消息与事件接收 URL 进行事件推送
$authorizer = Authorizers::with('platform')->where('appid', $appid)->find();
$platformAppId = $authorizer->platform->app_id;
} else {
// 转发授权事件推送请求给第三方
Forward::run($request, $xml->AppId, 'platform');
$forwardResult = Forward::run($request, $xml->AppId, 'platform');
// 授权事件推送包括:验证票据、授权成功、取消授权、授权更新、快速注册企业小程序、快速注册个人小程序、注册试用小程序、试用小程序快速认证、发起小程序管理员人脸核身、申请小程序备案
$platformAppId = (string)$xml->AppId;
}
$platform = Platform::where('app_id', $platformAppId)->find();
$app = new OpenPlatform($platform['id']);
return $app->handle($request, $appid);
$result = $app->handle($request, $appid);
if ($forwardResult !== false) {
return $forwardResult;
} else {
return $result;
}
} catch (\Exception $e) {
throw new BadRequestHttpException($e->getMessage());
}

@ -13,7 +13,7 @@
*/
return [
'listen' => 'http://0.0.0.0:8787',
'listen' => 'http://0.0.0.0:8789',
'transport' => 'tcp',
'context' => [],
'name' => 'webman',

@ -32,12 +32,22 @@
label="转发授权事件URL">
<a-input v-decorator="['forward_platform']"/>
</a-form-item>
<a-form-item extra="将转发授权事件URL的响应结果返回给平台" label="返回响应结果">
<a-checkbox v-decorator="['return_forward_platform', { valuePropName: 'checked' }]">
<!-- 将转发授权事件URL的响应结果返回给平台-->
</a-checkbox>
</a-form-item>
<a-form-item extra="转发消息与事件:设置小程序名称、添加类目、提交代码审核、审核结果 会向URL进行事件推送,该参数按规则填写(需包含/$APPID$,如https://www.abc.com/$APPID$/callback),实际接收消息时$APPID$将被替换为公众号或小程序AppId"
label="转发消息与事件URL">
<a-input
v-decorator="['forward_app', {rules: [{validator: validateForwardApp, message: '转发消息与事件URL需包含$APPID$'}]}]"/>
</a-form-item>
<a-form-item label="外部平台解密secret">
<a-form-item extra="将转发消息与事件URL的响应结果返回给平台" label="返回响应结果">
<a-checkbox v-decorator="['return_forward_app', { valuePropName: 'checked' }]">
<!-- 将转发消息与事件URL的响应结果返回给平台-->
</a-checkbox>
</a-form-item>
<a-form-item :label-col="formLayout.labelCol" :wrapper-col="formLayout.wrapperCol" label="第三方平台解密secret">
<a-input v-decorator="['third_secret']"/>
</a-form-item>
<a-form-item label="设为默认">
@ -52,7 +62,7 @@
import pick from 'lodash.pick'
//
const fields = ['id', 'name', 'app_id', 'secret', 'token', 'aes_key', 'forward_platform', 'forward_app', 'third_secret', 'is_default']
const fields = ['id', 'name', 'app_id', 'secret', 'token', 'aes_key', 'forward_platform', 'forward_app', 'return_forward_platform', 'return_forward_app', 'third_secret', 'is_default']
export default {
props: {
@ -70,18 +80,18 @@ export default {
}
},
data() {
this.formLayout = {
labelCol: {
xs: {span: 24},
sm: {span: 7}
},
wrapperCol: {
xs: {span: 24},
sm: {span: 13}
}
}
return {
form: this.$form.createForm(this)
form: this.$form.createForm(this),
formLayout: {
labelCol: {
xs: {span: 24},
sm: {span: 7}
},
wrapperCol: {
xs: {span: 24},
sm: {span: 13}
}
}
}
},
methods: {
@ -98,11 +108,18 @@ export default {
//
fields.forEach(v => this.form.getFieldDecorator(v, {}))
this.form.getFieldDecorator('is_default', {})
this.form.getFieldDecorator('return_forward_platform', {})
this.form.getFieldDecorator('return_forward_app', {})
// model
this.$watch('model', () => {
if (this.model) {
this.form.setFieldsValue(pick(this.model, fields))
this.form.setFieldsValue({is_default: this.model.is_default === 1})
this.form.setFieldsValue({
is_default: this.model.is_default === 1,
return_forward_platform: this.model.return_forward_platform === 1,
return_forward_app: this.model.return_forward_app === 1
})
}
})
}

@ -127,7 +127,7 @@ const vueConfig = {
// If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
proxy: {
'/admin': {
target: 'http://localhost:8787',
target: 'http://localhost:8789',
ws: false,
changeOrigin: true
}

@ -30,18 +30,20 @@ CREATE TABLE `authorizers`
-- 存储平台信息
CREATE TABLE `platform`
(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`app_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`secret` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`token` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`aes_key` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`forward_platform` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '转发授权事件:授权事件推送包括:验证票据、授权成功、取消授权、授权更新、快速注册企业小程序、快速注册个人小程序、注册试用小程序、试用小程序快速认证、发起小程序管理员人脸核身、申请小程序备案',
`forward_app` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '消息与事件推送包括:设置小程序名称、添加类目、提交代码审核。审核结果会向消息与事件接收 URL 进行事件推送',
`third_secret` char(32) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '外部平台解密数据时的secret',
`is_default` tinyint(1) unsigned NOT NULL DEFAULT '0',
`create_time` int(11) unsigned NOT NULL,
`update_time` int(11) unsigned NOT NULL,
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`app_id` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`secret` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`token` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`aes_key` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`forward_platform` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '转发授权事件:授权事件推送包括:验证票据、授权成功、取消授权、授权更新、快速注册企业小程序、快速注册个人小程序、注册试用小程序、试用小程序快速认证、发起小程序管理员人脸核身、申请小程序备案',
`return_forward_platform` tinyint(1) NOT NULL DEFAULT '0' COMMENT '响应返回结果',
`forward_app` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '消息与事件推送包括:设置小程序名称、添加类目、提交代码审核。审核结果会向消息与事件接收 URL 进行事件推送',
`return_forward_app` tinyint(1) NOT NULL COMMENT '响应返回结果',
`third_secret` char(32) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '外部平台解密数据时的secret',
`is_default` tinyint(1) unsigned NOT NULL DEFAULT '0',
`create_time` int(11) unsigned NOT NULL,
`update_time` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `app_id` (`app_id`) USING BTREE
) ENGINE = InnoDB

Loading…
Cancel
Save