diff --git a/mallinkService/pom.xml b/mallinkService/pom.xml index 6821563c8..cf4cd961f 100644 --- a/mallinkService/pom.xml +++ b/mallinkService/pom.xml @@ -39,7 +39,7 @@ com.alipay.sdk alipay-easysdk 2.2.0 - + \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/pay/alipay/AliPayUtil.java b/mallinkService/src/main/java/com/iformall/service/pay/alipay/AliPayUtil.java index dc2de120a..1441f3456 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/alipay/AliPayUtil.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/alipay/AliPayUtil.java @@ -1,9 +1,17 @@ package com.iformall.service.pay.alipay; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; +import java.util.UUID; + import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,10 +36,16 @@ import lombok.extern.slf4j.Slf4j; @Service public class AliPayUtil { - @Autowired - AliPayConfig payConfig; + //@Autowired + //AliPayConfig payConfig; private Config getConfig() { + AliPayConfig payConfig = new AliPayConfig(); + payConfig.setAppId("2021002137663024"); + payConfig.setAppPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCUfymV5J73QQMG52PVIGUbowkloYCO4B7TQoKbrTZf2YeYsg/To/o4PiXPMNwEUfEUU8NYQ6WwNhCd2fa1ei8WFXJUf3bfgswtBk1aOmHLeY9yoXFxIKMTQ9RcobnmBzKQZlaAPMTSr7t1QtKZKPuc2gEHGRFYKO/ZuL8gIpnsVidVtmi52yd7hzao/pI3ThLA0lreg4L3rYP5ESQZRytxIPgUQ4KI11pZxFgbe+uy28AGDYIQscSIb+SWOHPYKLvOEqqepIZ8M18w/U0lZzpzepzi/V/llekvXJ6UEf1lzl7x/4UIA3WPN1B40+NzbD/OxEGTuM0UctOG6ZTd4Te9AgMBAAECggEAPYksnHbvARspu/SrRCh2fatkIPn6Ijrxyy3mnch7neCw9i/jqxpqmF/4nxFqO0gRlRDZBHyT7p+Y5zDpsW5+kLI2fJmNkzXKkmXoLBnBaOZo8WHBdtXFfjg/iltig9Y7t+cQtXd5QK2eCwuz5dA75FXa0ywqKdRdAGY0nYZ5LpwrHVU8RXheUDCJyhKNj2+W6lIaSKDxLZU3laO1oBrv1agcy7Crd5E2ndb8O3Enga+z7wSz2h7A1BasC/Yl/Ro0Y21wLCH3s/R6qA0Paq12+WEF+xdodM7SrP43CCTVFGbC1TfEOdanJfixop8QuYsIp7pHrL925+vP4eY9RfckgQKBgQDQqLdpDzzU7Ot/L9Vc/r8d4iwXXbX8+HwVFV4oBuausgFyv8eJJpfrI+IlEoB1ubJcPpJBFqfmeYTW6/v6ioFljJAlWfFvesUVt/HszBMIOsU0Bzt7ex6WlwKOagb0q0ZPA4T0OY0K0lg0loaaaR8ZTr4ivDymaGBtTBYhslpc7QKBgQC2MBznGEc5r2dhyENvdPOR20PnXQcevGnPdqSus8m0VmDcHE72RVcckcZtwczsb3NaLSqmjAcWTn51/VFmlvhB3F34FcFTPZGq6sj7fWK8HuFq7l7mu5OzYuVr73zy9ggsUuaw10IqvvwIVxszNAF0hiRnSGH3z27CoRmz3s+8EQKBgQCK3o7atBJ3X4rIJiypbL4DhIB1uJ+jUjk6yvLUTut+fufp1+tTw0S+cS5UIAEw2Lr1G4u5F/v8rwmTBJG6SC4gSLGyui6uVBYRA1BWmedcxchzfRDAeMt9y9kesUAZ3Fe5xIzbAeZ1ulKMBVZmM+pHrJlsgr0Wv0bV1xqvqITtbQKBgBIsIGXopQoa9dvqBtfyOW1eCprkS5aEQqWf9vM6Ga90QjsSU8n6xqKh48IE57TZtQ7UnIF6TCasc66/MsRh4KdpHLJnMR5lcMc0nhF/wz5ychehaTPol+X3wlyOyc7OPah2KG6ROhdbb3ZBggQMduyxiKYIsUTvmuOtAAxR+DSRAoGADtuDzGQDOJYWiO2uuP6FpA5IJaiwlSfu3xncJVfhO8SVr6VBJFg88igbIB3w6nk/sv7j9VTXqXre9HMvp1flxaaLsdxM4HcTSALS9q6t/ajaveqte6S5kAtWx0WW8C6PtgWXHbxcD7LXARSsKLoEl2JXXyUVS/m2l/RzHBQ8GJI="); + payConfig.setAppPublicKeyCertPath("C://appCertPublicKey_2021002137663024.crt"); + payConfig.setAlipayCertPath("C://alipayCertPublicKey_RSA2.crt"); + payConfig.setAlipayRootCertPath("C://alipayRootCert.crt"); return AliPayApi.getOptions(payConfig.getAppId(), payConfig.getAppPrivateKey(), payConfig.getAppPublicKeyCertPath(), payConfig.getAlipayCertPath(), payConfig.getAlipayRootCertPath()); } @@ -78,13 +92,32 @@ public class AliPayUtil { //门店照片上传 public String merchantImageUpload(String appAuthToken,String imageName,byte[] file) { + String temfolder = "/alipaytempfile/"+UUID.randomUUID(); + File tempfolerFile = new File(temfolder); + if (!tempfolerFile.exists()) { + tempfolerFile.mkdirs(); + } + String temFilePath = temfolder+"/"+imageName; + File f = new File(temFilePath); + if (f.exists()) { + f.delete(); + } try { - AlipayOpenApiGenericResponse response = AliPayApi.uploadMerchantImage(getConfig(),appAuthToken,imageName, file); + FileOutputStream fos = new FileOutputStream(f); + fos.write(file); + fos.close(); + AlipayOfflineMaterialImageUploadResponse response = AliPayApi.uploadMerchantImage(getConfig(),appAuthToken,imageName, temFilePath); JSONObject result = getGenericResponse(response.getHttpBody(),"alipay_offline_material_image_upload_response"); + if (f.exists()) { + f.delete(); + } if (null != result) { return result.getString("image_id"); } } catch (Exception e) { + if (f.exists()) { + f.delete(); + } log.error("alipay merchantImageUpload error. ",e); } return null; @@ -116,6 +149,7 @@ public class AliPayUtil { rule0.setRule_name("ASSIGN_FROM_REQUEST"); rule0.setRule_value("Balance"); ruleList.add(rule0); + request.setField_rule_list(ruleList); try { AlipayOpenApiGenericResponse response = AliPayApi.createMemberCardModel(getConfig(),appAuthToken, request); @@ -145,9 +179,9 @@ public class AliPayUtil { } //获取商圈会员卡领卡投放链接 - public String getSmartDistrictMemberCardUrl(String appAuthToken,String templateId,String callback,String param) { + public String getSmartDistrictMemberCardUrl(String appAuthToken,String templateId,String appCallback,String param) { try { - AlipayOpenApiGenericResponse response = AliPayApi.getMemberCardUrl(getConfig(),appAuthToken, templateId, param, callback); + AlipayOpenApiGenericResponse response = AliPayApi.getMemberCardUrl(getConfig(),appAuthToken, templateId, param, appCallback); JSONObject result = getGenericResponse(response.getHttpBody(),"alipay_marketing_card_activateurl_apply_response"); if (null != result) { return result.getString("apply_card_url"); @@ -161,7 +195,7 @@ public class AliPayUtil { //商圈智能积分授权(算法授权)URL public String getH5SmartDistrictMallVipPointsUrl(String appId,String callback,String param) { try { - return "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=mall_vip_points&redirect_uri="+URLEncoder.encode(callback,"utf-8")+"&state="+param; + return "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id="+appId+"&scope=mall_vip_points&redirect_uri="+URLEncoder.encode(callback,"utf-8")+"&state="+param; } catch (UnsupportedEncodingException e) { log.error("alipay getH5MallVipPointsUrl error. ",e); } @@ -182,17 +216,40 @@ public class AliPayUtil { return false; } + public static byte[] File2byte(File tradeFile){ + byte[] buffer = null; + try + { + FileInputStream fis = new FileInputStream(tradeFile); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] b = new byte[1024]; + int n; + while ((n = fis.read(b)) != -1) + { + bos.write(b, 0, n); + } + fis.close(); + bos.close(); + buffer = bos.toByteArray(); + }catch (FileNotFoundException e){ + e.printStackTrace(); + }catch (IOException e){ + e.printStackTrace(); + } + return buffer; + } + public static void main(String[] args) { + AliPayUtil util = new AliPayUtil(); // String token = getAppAuthToken("Pfbe94a5103a0414db99ce865204ee63"); // System.out.println(token); - //merchantImageUpload("202104BB2f6dfa9641894b0fa3fabe10564f8X63", "aa.jpg", file); -// try { -// AlipayOfflineMaterialImageUploadResponse response= AliPayApi.uploadMerchantImage(getConfig(), "202104BB9d4876a83ec74f3fbc0407e13c67dX63", "logo-img.png", "C://logo-img.png"); -// System.out.println(JSON.toJSONString(response)); -// } catch (Exception e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } + //File file = new File("C://logo-img.png"); + //System.out.println(util.merchantImageUpload("202104BB054c88e950ba4513854e4275ff71cF63", "aa.jpg", File2byte(file))); + //System.out.println(util.createSmartDistrictMemberCardModel("202104BB054c88e950ba4513854e4275ff71cF63", "会员卡", "OKJx3oOPTUOaINs0AQ_qMgAAACMAAQQD", "OKJx3oOPTUOaINs0AQ_qMgAAACMAAQQD")); + //System.out.println(util.setSmartDistrictMemberCardModelConfig("202104BB054c88e950ba4513854e4275ff71cF63", "20210417000000002702655000300637")); + //System.out.println(util.getSmartDistrictMemberCardUrl("202104BB054c88e950ba4513854e4275ff71cF63", "20210417000000002702655000300637", "https://ctest.malls.iformall.com/C/api/alipay/callback", "123")); + //System.out.println(util.getH5SmartDistrictMallVipPointsUrl("2021002139648762", "https://ctest.malls.iformall.com/C/api/alipay/callback", "123")); + System.out.println(util.smartDistrictTopicSubscribe("202104BB054c88e950ba4513854e4275ff71cF63")); } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/alipay/api/AliPayApi.java b/mallinkService/src/main/java/com/iformall/service/pay/alipay/api/AliPayApi.java index b4e5d0ca3..c7711f763 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/alipay/api/AliPayApi.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/alipay/api/AliPayApi.java @@ -13,6 +13,7 @@ import com.alipay.easysdk.base.oauth.models.AlipaySystemOauthTokenResponse; import com.alipay.easysdk.factory.Factory; import com.alipay.easysdk.kernel.Config; import com.alipay.easysdk.util.generic.models.AlipayOpenApiGenericResponse; +import com.iformall.common.IdWorker; import com.iformall.service.pay.alipay.api.entity.memberCardModel.AlipayMemberCardModelColumn; import com.iformall.service.pay.alipay.api.entity.memberCardModel.AlipayMemberCardModelFieldRule; import com.iformall.service.pay.alipay.api.entity.memberCardModel.AlipayMemberCardModelRequest; @@ -107,22 +108,6 @@ public class AliPayApi { return response; } - public static AlipayOpenApiGenericResponse uploadMerchantImage(Config config,String appAuthToken,String imageName,byte[] file) throws Exception { - Factory.setOptions(config); - //设置系统参数(OpenAPI中非biz_content里的参数) - Map textParams = new HashMap(); - textParams.put("app_auth_token", appAuthToken); - - //设置业务参数(OpenAPI中biz_content里的参数) - Map bizParams = new HashMap(); - bizParams.put("image_type","jpg"); - bizParams.put("image_name",imageName); - bizParams.put("image_content",file); - AlipayOpenApiGenericResponse response = Factory.Util.Generic().agent(appAuthToken) - .execute("alipay.offline.material.image.upload", textParams, bizParams); - return response; - } - /** * https://opendocs.alipay.com/apis/api_5/alipay.marketing.card.template.create * 会员卡模板创建 @@ -136,7 +121,8 @@ public class AliPayApi { //设置业务参数(OpenAPI中biz_content里的参数) Map bizParams = new HashMap(); - bizParams.put("request_id", UUID.randomUUID().toString()); + IdWorker idWorker = IdWorker.get(); + bizParams.put("request_id", String.valueOf(idWorker.nextId())); bizParams.put("card_type", modelRequest.getCard_type()); bizParams.put("biz_no_suffix_len",modelRequest.getBiz_no_suffix_len()); bizParams.put("write_off_type", modelRequest.getWrite_off_type()); @@ -189,6 +175,7 @@ public class AliPayApi { /** * https://opendocs.alipay.com/apis/api_5/alipay.marketing.card.activateurl.apply * 获取会员卡领卡投放链接 + * @param callback为子应用回调地址,非ISV应用。 必须跟子应用的后台回调弟子配置一致。 */ public static AlipayOpenApiGenericResponse getMemberCardUrl(Config config,String appAuthToken,String templateId,String exparam,String callback) throws Exception { Factory.setOptions(config);