對接準備(以測試門店和測試服務為例)
1、 應用(如果還沒有自己的應用,可見建立應用:[url]https://openclub.alipay.com/read.php?tid=1606&fid=25[/url])
(1)如果是商戶自己開發,需要添加口碑碼戰略、當面付功能,當面付需要簽約,有BD請聯系BD簽約,如若沒有BD,并且不清楚如何簽約,可參考:[url]https://openclub.alipay.com/read.php?tid=276&fid=72[/url]
(2)如果是ISV代商戶開發,需要ISV在自己的應用添加口碑碼戰略、第三方應用授權功能,商戶簽約當面付産品,商戶第三方應用授權給ISV,建議ISV在回流資料的時候傳入APP_auth_token參數,建立支付訂單的時候必須傳遞APP_auth_token參數
注:我們強烈建議回流資料和APPID和建立支付訂單的APPID是同一個,如若不是,請務必保證回流資料的APPID和建立支付訂單的APPID同屬一個PID
2、 測試服務(內建階段建議使用測試服務,可參考測試服務建立辦法:[url]https://openclub.alipay.com/read.php?tid=3988&fid=72[/url])
3、 測試門店(內建階段建議使用測試門店,可參考測試門店建立辦法:[url]https://openclub.alipay.com/read.php?tid=4013&fid=71[/url]) ,測試門店預設有顯示服務card的能力,正式門店需要掃碼點菜驗收通過後才露出顯示服務card的能力
4、 測試門店訂購并上架測試服務,上架測試服務之後,使用者掃該門店的桌碼或者門店碼會跳轉到門店服務card的歡迎頁,底部插件區有“點餐”按鈕,如圖:
5、 點選服務card上面的“開始點菜”按鈕或者插件區的“點餐”按鈕會跳轉測試服務的使用者通路位址上面。(如果不清楚使用者通路位址,請回到第2步)
6、 使用者在點菜頁面點菜下單之後,需要回流資料
(1) 回流11狀态(使用者下單、等待商家确認)資料,代碼demo:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json","GBK",AlipayConfig.alipay_public_key,"RSA2"); AlipayOfflineProviderUseractionRecordRequest request = new AlipayOfflineProviderUseractionRecordRequest(); //request.putOtherTextParam("app_auth_token","201801BB6b27c190986b4dac9e85e66d5aec7X35");第三方應用授權 request.setBizContent("{" + //內建階段傳遞此參數,傳遞之後,在支付寶錢包-口碑tab-我-我的訂單-服務訂單中顯示一條資料,正式環境預設有顯示服務訂單的能力,不用傳遞此參數 "\"is_test_user\":\"1\","+ "\"source\":\"alipay.com\"," + "\"action_type\":\"order_dishes\"," + "\"industry\":\"REPAST\"," + "\"order_type\":\"order_dish\"," +//掃碼點菜場景此參數必填,傳遞order_dish參數标志這是一筆掃碼點菜的資料 "\"user_id\":\"2088712969xxxxxx\","+//user_id以2088開頭,建議傳遞,此參數會影響服務card的實時重新整理,可通過使用者資訊授權接口擷取 "\"date_time\":\"2018-01-26 14:24:30\"," + "\"action_detail\":{"+ "\"totalPrice\":\"11\","+ //總價,這裡需要注意的是機關分 "\"discountPrice\":\"11\","+ //優惠金額,這裡需要注意的是機關分 "\"realPrice\":\"11\","+ //實際支付,這裡需要注意的是機關分 //從第三方平台進入開發者應用,後産生的資料,傳入第三方平台域名,字段内容不做強制校驗。 //比如目前資料是支付寶掃碼後産生,傳入支付寶域名alipay.com;微信傳入微信域名weixin.qq.com;口碑傳入口碑域名koubei.com;如果資料不是從第三方平台進入後産生的資料,設定自己的域名即可 "\"source\":\"alipay.com\","+ "\"status\":\"11\","+ //11 使用者下單、等待商家确認 "\"outOrderId\":\"20180126145930111\","+ //外部訂單号,這裡需要注意的是,從使用者下單,商家确認,待支付,支付完成,是一筆訂單 "\"tableCode\":\"A05\","+ //桌号,此參數必填,該參數會影響該餐台的card更新 "\"people\":\"2\","+//消費人數,建議傳遞 //detailUrl參數必傳,直接影響到支付寶錢包-口碑tab-我-我的訂單-服務訂單,點選一條資料後跳轉的連結。此參數傳遞要求詳見文檔 "\"detailUrl\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\","+ /*需要注意的是price參數的機關是分!!!*/ "\"dish\":[{\"goodsId\":\"216137\",\"price\":2,\"num\":1,\"goodsName\":\"醬爆茄子\"}],"+//菜品清單,需要注意的price參數是機關分 "\"statusDesc\":\"待商家确認\","+//狀态文案說明,會影響card左上角的文案。請準确描述目前的狀态 //行動點對象清單,每次更新全量覆寫,此參數會直接影響服務card上面的按鈕顯示。請準确描述目前的狀态 //String name ; 行動名稱(比如,去買單、加菜,檢視詳情,再來一單) //String actionUrl 跳轉URL,建議ISV自行對該url進行加簽驗簽,以避免被惡意程式攔截篡改 //String type URL類型(官方常量 addDish(加菜) pay (去買單),官方會根據類型做業務邏輯,如果不在官方說明,請設定為空) "\"actionUrlList\":[{\"name\":\"檢視詳情\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"\"}," + "{\"name\":\"加菜\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"pay\"}],"+ //與目前訂單有關系的使用者,傳入json數組,此參數建議傳遞,也會直接影響到服務card的實時重新整理 //如果不是支付寶使用者不需要傳入,如果order_channel是alipay,強制校驗,必須要傳入 //userId (支付寶使用者ID) //type (使用者ID行為類型),type 可以選擇設定字元串value:pay,pushOrder,normal //type各value值含義說明: //pay:支付者 //pushOrder:下單的使用者 //normal:普通使用者,沒有做特殊說明的都是普通使用者 "\"realtionUserList\":[{\"userId\":\"2088712969xxxxxx\",\"type\":\"pushOrder\"}]"+ "}," + //店鋪關聯關系。标記目前接口涉及到的店鋪資訊,同時如果傳入的資料在口碑不存在,口碑會建立一條shop_id+outer_id+type的關聯資料 //傳遞之後,請不要再修改此參數 "\"outer_shop_do\":{"+ "\"shop_id\":\"20170803000770000000xxxxxxxx\","+//門店id "\"outer_id\":\"123456\","+//ISV系統中與口碑店鋪shop_id關聯的ISV店鋪主鍵 "\"type\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\""+//建議直接傳入ISV的域名 "},"+ "\"entity\":\"user\"," + "\"action_outer_id\":\"20180126145930111\"," +//每次請求的唯一id,需開發者自行保證此參數值每次請求的唯一性 "\"order_channel\":\"isv\"" +//該字段建議填寫。值定義:alipay、weixin、other、isv "}"); AlipayOfflineProviderUseractionRecordResponse response; try { response = alipayClient.execute(request); if (response.isSuccess()) { System.out.println("調用成功" + response.getBody()); } else { System.out.println("調用失敗" + response.getBody()); } } catch (AlipayApiException e) { e.printStackTrace(); }finally { } }
(2)回流13狀态(待支付)資料,代碼demo:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json","GBK",AlipayConfig.alipay_public_key,"RSA2"); AlipayOfflineProviderUseractionRecordRequest request = new AlipayOfflineProviderUseractionRecordRequest(); //request.putOtherTextParam("app_auth_token","201801BB6b27c190986b4dac9e85e66d5aec7X35");第三方應用授權 request.setBizContent("{" + //內建階段傳遞此參數,傳遞之後,在支付寶錢包-口碑tab-我-我的訂單-服務訂單中顯示一條資料,正式環境預設有顯示服務訂單的能力,不用傳遞此參數 "\"is_test_user\":\"1\","+ "\"source\":\"alipay.com\"," + "\"action_type\":\"order_dishes\"," + "\"industry\":\"REPAST\"," + "\"order_type\":\"order_dish\"," +//掃碼點菜場景此參數必填,傳遞order_dish參數标志這是一筆掃碼點菜的資料 "\"user_id\":\"2088712969xxxxxx\","+//user_id以2088開頭,建議傳遞,此參數會影響服務card的實時重新整理,可通過使用者資訊授權接口擷取 "\"date_time\":\"2018-01-26 14:38:30\"," + "\"action_detail\":{"+ "\"totalPrice\":\"33\","+ //總價,這裡需要注意的是機關分 "\"discountPrice\":\"33\","+ //優惠金額,這裡需要注意的是機關分 "\"realPrice\":\"33\","+ //實際支付,這裡需要注意的是機關分 //從第三方平台進入開發者應用,後産生的資料,傳入第三方平台域名, //比如目前資料是支付寶掃碼後産生,傳入支付寶域名alipay.com //是在微信打開後産生的資料,傳入微信域名weixin.qq.com //是在口碑打開後産生的資料,傳入口碑域名koubei.com //如果資料不是從第三方平台進入後産生的資料,設定自己的域名即可 //字段内容不做強制校驗。 "\"source\":\"alipay.com\","+ "\"status\":\"13\","+ //13商家确認,使用者待支付 //外部訂單号,這裡需要注意的是,從使用者下單,商家确認,待支付,支付完成,是一筆訂單 "\"outOrderId\":\"20180126145930111\","+ "\"tableCode\":\"A05\","+ //桌号,此參數必填,該參數會影響該餐台的card更新 "\"people\":\"2\","+//消費人數,建議傳遞 //detailUrl參數必傳,直接影響到支付寶錢包-口碑tab-我-我的訂單-服務訂單,點選一條資料後跳轉的連結 //傳入要求參考文檔要求 "\"detailUrl\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\","+ //菜品清單 //goodsId菜品ID,自定義 //goodsName 菜品名稱,自定義 //price 價格,機關為分,自定義 //num 點菜數量(int),自定義 "\"dish\":[{\"goodsId\":\"216137\",\"price\":2,\"num\":1,\"goodsName\":\"醬爆茄子\"}],"+//菜品清單 "\"statusDesc\":\"待支付\","+//狀态文案說明,會影響card左上角的文案。請準确描述目前的狀态 //行動點對象清單,每次更新全量覆寫,此參數會直接影響服務card上面的按鈕顯示。請準确描述目前的狀态 //String name ; 行動名稱(比如,去買單、加菜,檢視詳情,再來一單) //String actionUrl 跳轉URL,建議ISV自行對該url進行加簽驗簽,以避免被惡意程式攔截篡改 //String type URL類型(官方常量 addDish(加菜) pay (去買單),官方會根據類型做業務邏輯,如果不在官方說明,請設定為空) "\"actionUrlList\":[{\"name\":\"檢視詳情\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"\"}," + "{\"name\":\"去支付\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"pay\"}," + "{\"name\":\"加菜\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"pay\"}],"+ //與目前訂單有關系的使用者,傳入json數組 //如果不是支付寶使用者不需要傳入,如果order_channel是alipay,強制校驗,必須要傳入 //String userId (支付寶使用者ID) //String type (使用者ID行為類型),type 可以選擇設定字元串value:pay,pushOrder,normal //type各value值含義說明: //pay:支付者 //pushOrder:下單的使用者 //normal:普通使用者,沒有做特殊說明的都是普通使用者 "\"realtionUserList\":[{\"userId\":\"2088712969xxxxxx\",\"type\":\"pushOrder\"}]"+ "}," + //店鋪關聯關系。标記目前接口涉及到的店鋪資訊,同時如果傳入的資料在口碑不存在,口碑會建立一條shop_id+outer_id+type的關聯資料 //傳遞之後,建議不要再修改此參數 "\"outer_shop_do\":{"+ "\"shop_id\":\"20170803000770000000xxxxxxxx\","+//門店id "\"outer_id\":\"123456\","+//ISV系統中與口碑店鋪shop_id關聯的ISV店鋪主鍵 "\"type\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\""+//建議直接傳入ISV的域名 "},"+ "\"entity\":\"user\"," + "\"action_outer_id\":\"20180126145930222\"," +//每次請求的唯一id,需開發者自行保證此參數值每次請求的唯一性 "\"order_channel\":\"isv\"" +//該字段建議填寫。值定義:alipay、weixin、other、isv"}"); AlipayOfflineProviderUseractionRecordResponse response; try { response = alipayClient.execute(request); if (response.isSuccess()) { System.out.println("調用成功" + response.getBody()); } else { System.out.println("調用失敗" + response.getBody()); } } catch (AlipayApiException e) { // TODO Auto-generated catch block e.printStackTrace(); }
(3)回流14狀态(已支付)資料,并清台。代碼demo:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json","GBK",AlipayConfig.alipay_public_key,"RSA2"); AlipayOfflineProviderUseractionRecordRequest request = new AlipayOfflineProviderUseractionRecordRequest(); //request.putOtherTextParam("app_auth_token","201801BB6b27c190986b4dac9e85e66d5aec7X35");第三方應用授權 request.setBizContent("{" + //內建階段傳遞此參數,傳遞之後,在支付寶錢包-口碑tab-我-我的訂單-服務訂單中顯示一條資料,正式環境預設有顯示服務訂單的能力,不用傳遞此參數 "\"is_test_user\":\"1\","+ "\"source\":\"alipay.com\"," + "\"action_type\":\"order_dishes\"," + "\"industry\":\"REPAST\"," + "\"order_type\":\"order_dish\"," +//掃碼點菜場景此參數必填,傳遞order_dish參數标志這是一筆掃碼點菜的資料 "\"user_id\":\"2088712969xxxxxx\","+//user_id以2088開頭,建議傳遞,此參數會影響服務card的實時重新整理,可通過使用者資訊授權接口擷取 "\"date_time\":\"2018-01-26 14:44:30\"," + "\"action_detail\":{"+ "\"totalPrice\":\"33\","+ //總價,這裡需要注意的是機關分 "\"discountPrice\":\"33\","+ //優惠金額,這裡需要注意的是機關分 "\"realPrice\":\"33\","+ //實際支付,這裡需要注意的是機關分 //從第三方平台進入開發者應用,後産生的資料,傳入第三方平台域名, //比如目前資料是支付寶掃碼後産生,傳入支付寶域名alipay.com //是在微信打開後産生的資料,傳入微信域名weixin.qq.com //是在口碑打開後産生的資料,傳入口碑域名koubei.com //如果資料不是從第三方平台進入後産生的資料,設定自己的域名即可 //字段内容不做強制校驗。 "\"source\":\"alipay.com\","+ "\"status\":\"14\","+ //13商家确認,使用者待支付 //下面三個參數在14狀态下必傳 "\"payTime\":\"\","+ //注意,這裡是精确到毫秒,此參數傳遞錯誤,會影響清台後的服務card正常顯示 "\"channel\":\"alipay\","+ "\"payOrderNo\":\"2018012321001004350510117761\","+ //外部訂單号,這裡需要注意的是,從使用者下單,商家确認,待支付,支付完成,是一筆訂單 "\"outOrderId\":\"20180126145930222\","+ "\"tableCode\":\"A05\","+ //桌号,此參數必填,該參數會影響該餐台的card更新 "\"people\":\"2\","+//消費人數,建議傳遞 //detailUrl參數必傳,直接影響到支付寶錢包-口碑tab-我-我的訂單-服務訂單,點選一條資料後跳轉的連結 //傳入要求參考文檔要求 "\"detailUrl\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\","+ //菜品清單 //goodsId菜品ID,自定義 //goodsName 菜品名稱,自定義 //price 價格,機關為分,自定義 //num 點菜數量(int),自定義 "\"dish\":[{\"goodsId\":\"216137\",\"price\":2,\"num\":1,\"goodsName\":\"醬爆茄子\"}],"+//菜品清單 "\"statusDesc\":\"已支付\","+//狀态文案說明,會影響card左上角的文案。請準确描述目前的狀态 //代表是否清桌,預設0。1:清桌,代表桌位可以被他人使用。0:占用,代表座位正在被人使用(比如點菜中、訂單沒有完結,都認為是被占用中,其他人員無法再次下單) //對表現層的影響是,如果傳了1,則隻有支付使用者和下單使用者在傳遞的payTime參數内的半小時見realtionUserList參數)能看到card,其他使用者為新的card。 //如果傳了0,則所有使用者掃桌碼都會看到目前card。 "\"hasClosed\":\"1\","+ //行動點對象清單,每次更新全量覆寫,此參數會直接影響服務card上面的按鈕顯示。請準确描述目前的狀态 //String name ; 行動名稱(比如,去買單、加菜,檢視詳情,再來一單) //String actionUrl 跳轉URL,建議ISV自行對該url進行加簽驗簽,以避免被惡意程式攔截篡改 //String type URL類型(官方常量 addDish(加菜) pay (去買單),官方會根據類型做業務邏輯,如果不在官方說明,請設定為空) "\"actionUrlList\":[{\"name\":\"檢視詳情\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"pay\"}," + "{\"name\":\"再下一單\",\"actionUrl\":\"http://www.ieasy360.com\",\"type\":\"pay\"}],"+ //與目前訂單有關系的使用者,傳入json數組 //如果不是支付寶使用者不需要傳入,如果order_channel是alipay,強制校驗,必須要傳入 //String userId (支付寶使用者ID) //String type (使用者ID行為類型),type 可以選擇設定字元串value:pay,pushOrder,normal //type各value值含義說明: //pay:支付者 //pushOrder:下單的使用者 //normal:普通使用者,沒有做特殊說明的都是普通使用者 "\"realtionUserList\":[{\"userId\":\"2088712969xxxxxx\",\"type\":\"pay\"}]"+ "}," + //店鋪關聯關系。标記目前接口涉及到的店鋪資訊,同時如果傳入的資料在口碑不存在,口碑會建立一條shop_id+outer_id+type的關聯資料 //傳遞之後,建議不要再修改此參數 "\"outer_shop_do\":{"+ "\"shop_id\":\"2017080300077000000044490772\","+//門店id "\"outer_id\":\"123456\","+//ISV系統中與口碑店鋪shop_id關聯的ISV店鋪主鍵 "\"type\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\""+//建議直接傳入ISV的域名 "},"+ "\"entity\":\"user\"," + "\"action_outer_id\":\"20180126145430111\"," +//每次請求的唯一id,需開發者自行保證此參數值每次請求的唯一性 "\"order_channel\":\"isv\"" +//該字段建議填寫。值定義:alipay、weixin、other、isv "}"); AlipayOfflineProviderUseractionRecordResponse response; try { response = alipayClient.execute(request); if (response.isSuccess()) { System.out.println("調用成功" + response.getBody()); } else { System.out.println("調用失敗" + response.getBody()); } } catch (AlipayApiException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
(4)回流15狀态(一般這個狀态是點餐過程中有異常情況,需要結束點餐流程的時候回流)資料。代碼demo:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json","GBK",AlipayConfig.alipay_public_key,"RSA2"); AlipayOfflineProviderUseractionRecordRequest request = new AlipayOfflineProviderUseractionRecordRequest(); //request.putOtherTextParam("app_auth_token","201801BB6b27c190986b4dac9e85e66d5aec7X35");第三方應用授權 request.setBizContent("{" + //內建階段傳遞此參數,傳遞之後,在支付寶錢包-口碑tab-我-我的訂單-服務訂單中顯示一條資料,正式環境預設有顯示服務訂單的能力,不用傳遞此參數 "\"is_test_user\":\"1\","+ "\"source\":\"alipay.com\"," + "\"action_type\":\"order_dishes\"," + "\"industry\":\"REPAST\"," + "\"order_type\":\"order_dish\"," +//掃碼點菜場景此參數必填,傳遞order_dish參數标志這是一筆掃碼點菜的資料 "\"user_id\":\"20887129xxxxxxxx\","+//user_id以2088開頭,建議傳遞,此參數會影響服務card的實時重新整理,可通過使用者資訊授權接口擷取 "\"date_time\":\"2018-01-26 16:28:30\"," + "\"action_detail\":{"+ "\"totalPrice\":\"\","+ //總價,15狀态可傳空,但必傳要傳遞此參數,否則接口調用會報錯 "\"discountPrice\":\"\","+ //優惠金額,15狀态可傳空,但必傳要傳遞此參數,否則接口調用會報錯 "\"realPrice\":\"\","+ //實際支付,15狀态可傳空,但必傳要傳遞此參數,否則接口調用會報錯 //從第三方平台進入開發者應用,後産生的資料,傳入第三方平台域名, //比如目前資料是支付寶掃碼後産生,傳入支付寶域名alipay.com //是在微信打開後産生的資料,傳入微信域名weixin.qq.com //是在口碑打開後産生的資料,傳入口碑域名koubei.com //如果資料不是從第三方平台進入後産生的資料,設定自己的域名即可 //字段内容不做強制校驗。 "\"source\":\"alipay.com\","+ "\"status\":\"15\","+ //關閉點餐流程 //外部訂單号,這裡需要注意的是,從使用者下單,商家确認,待支付,支付完成,是一筆訂單 "\"outOrderId\":\"20180126145930222\","+ "\"tableCode\":\"A05\","+ //桌号,此參數必填,該參數會影響該餐台的card更新 //detailUrl參數必傳,直接影響到支付寶錢包-口碑tab-我-我的訂單-服務訂單,點選一條資料後跳轉的連結 //傳入要求參考文檔要求 "\"detailUrl\":\"http://17675wt546.iok.la:29682/pc/notify_url.jsp\","+ //與目前訂單有關系的使用者,傳入json數組 //如果不是支付寶使用者不需要傳入,如果order_channel是alipay,強制校驗,必須要傳入 //String userId (支付寶使用者ID) //String type (使用者ID行為類型),type 可以選擇設定字元串value:pay,pushOrder,normal //type各value值含義說明: //pay:支付者 //pushOrder:下單的使用者 //normal:普通使用者,沒有做特殊說明的都是普通使用者 "\"realtionUserList\":[{\"userId\":\"20887129xxxxxxxx\",\"