From bca940a8c554cec6390765a0066bc5fc934d5313 Mon Sep 17 00:00:00 2001 From: yixian Date: Tue, 1 May 2018 22:52:58 +0800 Subject: [PATCH] document update, php demo update --- src/document/cn/apis.js | 54 ++---------- src/document/en/apis.js | 54 ++---------- src/main/ui/static/phpdemo.zip | Bin 40970 -> 49285 bytes .../payment/manage/task/FillExcelTask.java | 83 ++++++++++++++++++ 4 files changed, 101 insertions(+), 90 deletions(-) create mode 100644 src/test/java/au/com/royalpay/payment/manage/task/FillExcelTask.java diff --git a/src/document/cn/apis.js b/src/document/cn/apis.js index f0e0dbcc7..de43ef974 100644 --- a/src/document/cn/apis.js +++ b/src/document/cn/apis.js @@ -756,52 +756,15 @@ * */ /** - * @api {PUT} /api/v1.0/alipay/partners/{partner_code}/app_orders/{order_id} 创建支付宝SDK订单 - * @apiName AlipaySDK - * @apiDescription - * 用于移动端APP调用支付宝SDK支付,调用API创建订单,得到支付宝SDK调用参数,将参数传递给SDK拉起支付宝支付,并由支付宝客户端直接返回支付结果。 - * 强烈建议获得支付结果后再调用RoyalPay订单查询API确认完成支付后再进行后续流程,避免因超时自动撤单导致资金损失
- *
- * 关于客户端和支付宝整合的更多信息: 支付宝SDK文档
- * SDK for Android
- * SDK for iOS - * - * @apiVersion 1.0.0 - * @apiGroup SDKPayment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * @apiParam (JSON) {String=android,iphone,ipad} system 客户端操作系统类型,可选参数 - * @apiParam (JSON) {String} version 客户端版本号,可选参数 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是微信订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} sdk_params 调用SDK的参数字符串 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id} 创建微信SDK订单 - * @apiName WechatSDK + * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id} 创建SDK订单 + * @apiName SDK * @apiDescription * 用于移动端APP调用微信SDK支付,调用API创建订单,得到微信SDK调用参数,将参数传递给SDK拉起微信支付,并由微信客户端直接返回支付结果。 * 强烈建议获得支付结果后再调用RoyalPay订单查询API确认完成支付后再进行后续流程,避免因超时自动撤单导致资金损失
*
+ * 关于客户端和支付宝整合的更多信息: 支付宝SDK文档
+ * SDK for Android
+ * SDK for iOS * * @apiVersion 1.0.0 * @apiGroup SDKPayment @@ -813,11 +776,12 @@ * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 + * @apiParam (JSON) {String=Alipay,Wechat} 支付渠道,必填,大小写敏感 * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 * @apiParam (JSON) {String} operator 操作人员标识 - * @apiParam (JSON) {String=android,iphone,ipad} system 客户端操作系统类型,可选参数 - * @apiParam (JSON) {String} version 客户端版本号,可选参数 - * @apiParam (JSON) {String} appid 微信 appid + * @apiParam (JSON) {String=android,iphone,ipad} system 客户端操作系统类型,支付宝通道可选,微信不需要 + * @apiParam (JSON) {String} version 客户端版本号,支付宝通道可选,微信不需要 + * @apiParam (JSON) {String} appid 微信 appid,微信通道要求必填 * * @apiSuccess {String} return_code 执行结果 * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 diff --git a/src/document/en/apis.js b/src/document/en/apis.js index 86f8737d8..716e20dfe 100644 --- a/src/document/en/apis.js +++ b/src/document/en/apis.js @@ -769,54 +769,17 @@ * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid * */ -/** - * @api {PUT} /api/v1.0/alipay/partners/{partner_code}/app_orders/{order_id} 创建支付宝SDK订单 - * @apiName AlipaySDK - * @apiDescription - * Used for mobile Apps calling Alipay payment with Alipay SDK. Call this api to create order and get param string for SDK calling. Call SDK api with the param to start payment and get payment result from Alipay app - * It is strongly advised to request RoyalPay order query Api to confirm that the order has been paid in order to cancelling order by system at the same time.
- *
- * More information for integration with Alipay: Alipay SDK Document
- * SDK for Android
- * SDK for iOS - * @apiVersion 1.0.0 - * @apiGroup SDKPayment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * @apiParam (JSON) {String=android,iphone,ipad} system os type of client app, optional - * @apiParam (JSON) {String} version client app version, optional - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also WeChat order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} sdk_params param string for calling SDK - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ - /** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id} Create Wechat SDK Order - * @apiName WechatSDK + * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id} Create SDK Order + * @apiName SDK * @apiDescription * Used for mobile Apps calling Wechat payment with Wechat SDK. Call this api to create order and get param string for SDK calling. Call SDK api with the param to start payment and get payment result from Wechat app * It is strongly advised to request RoyalPay order query Api to confirm that the order has been paid in order to cancelling order by system at the same time.
*
+ * More information for integration with Alipay: Alipay SDK Document
+ * SDK for Android
+ * SDK for iOS * @apiVersion 1.0.0 * @apiGroup SDKPayment * @apiHeader Accept application/json @@ -827,11 +790,12 @@ * @apiParam (JSON) {String} description Required, Order description * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency + * @apiParam (JSON) {String=Alipay,Wechat} payment channel, required, case sensitive * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds * @apiParam (JSON) {String} operator Note for the operator who created this order. - * @apiParam (JSON) {String=android,iphone,ipad} system os type of client app, optional - * @apiParam (JSON) {String} version client app version, optional - * @apiParam (JSON) {String} appid wechat appid + * @apiParam (JSON) {String=android,iphone,ipad} system os type of client app, optional for Alipay, not required for Wechat + * @apiParam (JSON) {String} version client app version, optional for Alipay, not required for Wechat + * @apiParam (JSON) {String} appid wechat appid, required for Wechat, not required for Alipay * * @apiSuccess {String} return_code Execution result * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. diff --git a/src/main/ui/static/phpdemo.zip b/src/main/ui/static/phpdemo.zip index bac6014f9d8bf06bb8a82bfb872f453baa693109..779335b1922ea27a016a963095fd70a6daa6ce42 100644 GIT binary patch delta 27809 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

CcL8#=x&kwuh1flI$(I(XUU|4VCmE|g< zVtZ*GwprYJ+RUzbRS?>4Dx83?=B2Pa}IG}X%h4l)yjtI@mM5`FsFrU)9Tg}BZ z*0#AC75d3D*cYgr$Ck06d7+lTJJg5#i9Ag}I_81Od2IeR%_~P6n#5mQpQpt8)R}>K zpmH9Y)k^ca(9D?ds{4H?q|A4Z_O zLBc~hCVbj}o#auy?*e8jZHdY~vKc7A^hV5lis^HTxnIQb18h*5ZJxeDv#Ye=H*C;D z&7JdzFZD4hH1{rIub?zfXg>IXNjXMJ=I=7Gw2Y#cYutIGwR?a&5K z_l@vC8}Fs z%?lsNAABEz(meC<2AbDc2E2}8mjKSIX0#ghuSHh@ZZ9a|k?}3?_~7Sm*< royalCatMap; + private Map wxCatMap; + private File excel = new File("C:\\Users\\yixian\\Documents\\bd_merchants.xlsx"); + + @Before + public void initCategory() throws IOException { + String rpayCatStr = FileUtils.readFileToString(rpayCat, "utf-8"); + JSONArray rpayCatJson = JSON.parseArray(rpayCatStr); + List flatCollect = rpayCatJson.stream().map(item -> (JSONObject) item) + .flatMap(item -> loadChildren(item).stream()).collect(Collectors.toList()); + royalCatMap = rpayCatJson.stream().map(item -> (JSONObject) item) + .flatMap(item -> loadChildren(item).stream()) + .collect(Collectors.toMap(item -> item.getString("mccCode"), item -> item.getString("label"), (a, b) -> a)); + + String wxCatStr = FileUtils.readFileToString(wxCat, "utf-8"); + JSONObject wxCatJson = JSON.parseObject(wxCatStr); + wxCatMap = wxCatJson.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> (String) entry.getValue())); + + } + + private List loadChildren(JSONObject entity) { + if (entity.containsKey("children") && !entity.getJSONArray("children").isEmpty()) { + List arr = new ArrayList<>(Arrays.asList(entity)); + arr.addAll(entity.getJSONArray("children").stream().map(item -> (JSONObject) item).flatMap(item -> loadChildren(item).stream()).collect(Collectors.toList())); + return arr; + } + return Collections.singletonList(entity); + } + + @Test + public void replaceCat() throws IOException, InvalidFormatException { + Workbook wb = WorkbookFactory.create(excel); + Sheet sheet = wb.getSheetAt(0); + for (int rn = 1; rn <= sheet.getLastRowNum(); rn++) { + Row row = sheet.getRow(rn); + Cell wxCatCell = row.getCell(2); + Cell rpCatCell = row.getCell(3); + fillCateLabel(wxCatCell, wxCatMap); + fillCateLabel(rpCatCell, royalCatMap); + } + wb.write(new FileOutputStream("C:\\Users\\yixian\\Documents\\bd_merchants_final.xlsx")); + } + + private void fillCateLabel(Cell rpCatCell, Map royalCatMap) { + if (rpCatCell == null) { + return; + } + if (rpCatCell.getCellType() == Cell.CELL_TYPE_NUMERIC) { + String typeNum = (int) rpCatCell.getNumericCellValue() + ""; + if (royalCatMap.get(typeNum) != null) { + rpCatCell.setCellType(Cell.CELL_TYPE_STRING); + rpCatCell.setCellValue(royalCatMap.get(typeNum)); + } + } + } +}