commit
25cf788682
@ -0,0 +1,81 @@
|
||||
package au.com.royalpay.payment.manage.customers.beans;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import org.hibernate.validator.constraints.NotEmpty;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class CustomerComment {
|
||||
|
||||
@NotEmpty(message = "error.payment.valid.param_missing")
|
||||
@JSONField(name = "first_name")
|
||||
private String firstName;
|
||||
|
||||
@NotEmpty(message = "error.payment.valid.param_missing")
|
||||
@JSONField(name = "last_name")
|
||||
private String lastName;
|
||||
|
||||
@NotEmpty(message = "error.payment.valid.param_missing")
|
||||
private String email;
|
||||
|
||||
private String comment;
|
||||
|
||||
@JSONField(name = "create_time")
|
||||
private Date createTime;
|
||||
|
||||
private int status;
|
||||
|
||||
public JSONObject insertObject() {
|
||||
return (JSONObject) JSON.toJSON(this);
|
||||
}
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public void setFirstName(String firstName) {
|
||||
this.firstName = firstName;
|
||||
}
|
||||
|
||||
public String getLastName() {
|
||||
return lastName;
|
||||
}
|
||||
|
||||
public void setLastName(String lastName) {
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public String getComment() {
|
||||
return comment;
|
||||
}
|
||||
|
||||
public void setComment(String comment) {
|
||||
this.comment = comment;
|
||||
}
|
||||
|
||||
public Date getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(int status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package au.com.royalpay.payment.manage.customers.core;
|
||||
|
||||
import au.com.royalpay.payment.manage.customers.beans.CustomerComment;
|
||||
|
||||
public interface CustomerCommentService {
|
||||
|
||||
void save(CustomerComment customerComment);
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package au.com.royalpay.payment.manage.customers.core.impls;
|
||||
|
||||
import au.com.royalpay.payment.manage.customers.beans.CustomerComment;
|
||||
import au.com.royalpay.payment.manage.customers.core.CustomerCommentService;
|
||||
import au.com.royalpay.payment.manage.mappers.system.SysCustomerCommentMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class CustomerCommentServiceImpl implements CustomerCommentService {
|
||||
|
||||
@Resource
|
||||
private SysCustomerCommentMapper customerCommentMapper;
|
||||
|
||||
@Override
|
||||
public void save(CustomerComment customerComment) {
|
||||
customerComment.setCreateTime(new Date());
|
||||
customerCommentMapper.save(customerComment.insertObject());
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package au.com.royalpay.payment.manage.customers.web;
|
||||
|
||||
import au.com.royalpay.payment.manage.customers.beans.CustomerComment;
|
||||
import au.com.royalpay.payment.manage.customers.core.CustomerCommentService;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 客户联系
|
||||
*/
|
||||
@RequestMapping("/customer")
|
||||
@RestController
|
||||
public class CustomerCommentController {
|
||||
|
||||
@Resource
|
||||
private CustomerCommentService customerCommentService;
|
||||
|
||||
@RequestMapping("/contact/comment")
|
||||
public void saveCustomerComment(@RequestBody @Valid CustomerComment customerComment) {
|
||||
customerCommentService.save(customerComment);
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package au.com.royalpay.payment.manage.mappers.system;
|
||||
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
@AutoMapper(tablename = "sys_customer_comment", pkName = "id")
|
||||
public interface SysCustomerCommentMapper {
|
||||
|
||||
@AutoSql(type = SqlType.INSERT)
|
||||
void save(JSONObject info);
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package au.com.royalpay.payment.manage.mappers.system;
|
||||
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
|
||||
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@AutoMapper(tablename = "sys_customer_subscribe", pkName = "id")
|
||||
public interface SysCustomerSubscribeMapper {
|
||||
|
||||
@AutoSql(type = SqlType.INSERT)
|
||||
void save(JSONObject info);
|
||||
|
||||
@AutoSql(type = SqlType.SELECT)
|
||||
JSONObject findByEmail(@Param("subscribe_email") String email);
|
||||
|
||||
@AutoSql(type = SqlType.UPDATE)
|
||||
void update(JSONObject subscribeInfo);
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package au.com.royalpay.payment.manage.support.serverless;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* Create by davep at 2019-08-08 15:56
|
||||
*/
|
||||
public interface ServerlessFunctionTrigger {
|
||||
|
||||
JSONObject triggerFunction(String function,JSONObject params);
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package au.com.royalpay.payment.manage.support.serverless.qcloud;
|
||||
|
||||
import au.com.royalpay.payment.manage.support.serverless.ServerlessFunctionTrigger;
|
||||
import au.com.royalpay.payment.manage.support.serverless.qcloud.support.ServerLessFunctionInvokeRequest;
|
||||
import au.com.royalpay.payment.tools.exceptions.ServerErrorException;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* Create by davep at 2019-08-12 9:31
|
||||
*/
|
||||
@Service
|
||||
public class QCloudServerlessTrigger implements ServerlessFunctionTrigger {
|
||||
private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
private RestTemplate restTemplate;
|
||||
private String secretId;
|
||||
private String secretKey;
|
||||
private String region;
|
||||
|
||||
public QCloudServerlessTrigger(@Value("${qcloud.secret-id}") String secretId,
|
||||
@Value("${qcloud.secret-key}") String secretKey,
|
||||
@Value("${qcloud.scf.region}") String region) {
|
||||
this.secretId = secretId;
|
||||
this.secretKey = secretKey;
|
||||
this.region = region;
|
||||
this.restTemplate = new RestTemplateBuilder()
|
||||
.messageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8))
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public JSONObject triggerFunction(String function, JSONObject params) {
|
||||
ServerLessFunctionInvokeRequest request = new ServerLessFunctionInvokeRequest(secretId, secretKey, region, function, params);
|
||||
ResponseEntity<String> resp = restTemplate.exchange(request.request(), String.class);
|
||||
JSONObject data = JSON.parseObject(resp.getBody());
|
||||
JSONObject response = data.getJSONObject("Response");
|
||||
String requestId = response.getString("RequestId");
|
||||
JSONObject result = response.getJSONObject("Result");
|
||||
int invokeResult = result.getIntValue("InvokeResult");
|
||||
if (invokeResult != 0) {
|
||||
String errMsg = result.getString("ErrMsg");
|
||||
logger.error("Invoking function [{}] failed,request id={},invoke result={},errMsg={}", function, requestId, invokeResult, errMsg);
|
||||
throw new ServerErrorException("Invoke function " + function + " failed:[" + errMsg + "]");
|
||||
} else {
|
||||
String retMsg = result.getString("RetMsg");
|
||||
return StringUtils.isNotEmpty(retMsg) ? JSON.parseObject(retMsg) : null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package au.com.royalpay.payment.manage.support.serverless.qcloud.support;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.util.MimeTypeUtils;
|
||||
|
||||
/**
|
||||
* Create by davep at 2019-08-12 17:13
|
||||
*/
|
||||
public class ServerLessFunctionInvokeRequest extends QCloudV3Request {
|
||||
private final String functionName;
|
||||
private final JSONObject clientContext;
|
||||
|
||||
public ServerLessFunctionInvokeRequest(String secretId, String secretKey, String region, String functionName, JSONObject clientContext) {
|
||||
super(secretId, secretKey, region);
|
||||
this.functionName = functionName;
|
||||
this.clientContext = clientContext == null ? new JSONObject() : clientContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String host() {
|
||||
return "scf.tencentcloudapi.com";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String uri() {
|
||||
return "/";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected HttpMethod method() {
|
||||
return HttpMethod.POST;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String action() {
|
||||
return "Invoke";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String version() {
|
||||
return "2018-04-16";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String contentType() {
|
||||
return MimeTypeUtils.APPLICATION_JSON_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String requestPayload() {
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("FunctionName", functionName);
|
||||
data.put("ClientContext", clientContext.toJSONString());
|
||||
return data.toJSONString();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String queryStringParams() {
|
||||
return "";
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<html xmlns:th="http://www.thymeleaf.org" lang="zh">
|
||||
<body>
|
||||
<div style="text-align: center">
|
||||
<img style="width: 50%" th:src="${imageUrl}" />
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 348 KiB |
After Width: | Height: | Size: 326 KiB |
@ -0,0 +1,81 @@
|
||||
package au.com.royalpay.payment.manage.valid;
|
||||
|
||||
import au.com.royalpay.payment.manage.support.serverless.qcloud.support.ServerLessFunctionInvokeRequest;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.RandomUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.net.util.Base64;
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Create by davep at 2019-08-08 16:21
|
||||
*/
|
||||
public class QCloudSignTest {
|
||||
|
||||
private String function = "export_merchants";
|
||||
private String region = "ap-hongkong";
|
||||
private String secretId = "AKIDlHdjgWzZliPvBauZFfrnW0MaZOyHdTPz";
|
||||
private String secretKey = "YswoQDsIZfWEqEAEvMXS8Yic84lFn9Jp";
|
||||
|
||||
@Test
|
||||
public void printUrl() throws NoSuchAlgorithmException, InvalidKeyException {
|
||||
String host = "scf.tencentcloudapi.com/";
|
||||
String method = "GET";
|
||||
Map<String, String> paramsMap = new HashMap<>();
|
||||
paramsMap.put("Action", "Invoke");
|
||||
paramsMap.put("Version", "2018-04-16");
|
||||
paramsMap.put("Region", region);
|
||||
paramsMap.put("FunctionName", function);
|
||||
paramsMap.put("ClientContext", "{\"client_moniker\":\"PINE\"}");
|
||||
paramsMap.put("Nonce", "" + RandomUtils.nextInt(0, 999999));
|
||||
paramsMap.put("Timestamp", "" + System.currentTimeMillis() / 1000);
|
||||
paramsMap.put("SignatureMethod", "HmacSHA256");
|
||||
paramsMap.put("SecretId", secretId);
|
||||
|
||||
String[] params = paramsMap.entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).toArray(String[]::new);
|
||||
|
||||
Arrays.sort(params);
|
||||
String base = method + host + "?" + StringUtils.join(params, "&");
|
||||
String key = secretKey;
|
||||
|
||||
Mac sha256HMAC = Mac.getInstance("HmacSHA256");
|
||||
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA256");
|
||||
sha256HMAC.init(secretKey);
|
||||
byte[] finalBytes = sha256HMAC.doFinal(base.getBytes());
|
||||
String sign = Base64.encodeBase64String(finalBytes);
|
||||
paramsMap.put("Signature", sign);
|
||||
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://" + host);
|
||||
for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
|
||||
builder.queryParam(entry.getKey(), entry.getValue());
|
||||
}
|
||||
System.out.println(builder.build(false).encode().toUriString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void v3Test() {
|
||||
RestTemplate restTemplate = new RestTemplateBuilder()
|
||||
.messageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8))
|
||||
.build();
|
||||
JSONObject params = new JSONObject();
|
||||
params.put("client_moniker", "PINE");
|
||||
ServerLessFunctionInvokeRequest request = new ServerLessFunctionInvokeRequest(secretId, secretKey, region, function, params);
|
||||
ResponseEntity<String> resp = restTemplate.exchange(request.request(), String.class);
|
||||
System.out.println(resp.getBody());
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in new issue