支付宝H5 与网页端支付开发
在日常生活中,我們基本上都是進行微信與支付寶的支付方式盡心支付,這種方式確實大大便利了我們的生活,那么如何在我們的產(chǎn)品中進行微信與支付寶支付的植入開發(fā)呢?
?
我們先進行支付寶的H5與網(wǎng)頁端支付開發(fā),這里只進行支付寶支付的調(diào)用,關于具體的生產(chǎn)邏輯(例如訂單之類等)大家可以根據(jù)自己的邏輯處理添加;
支付寶的開發(fā)配置地址:https://openhome.alipay.com/
進入開發(fā)者中心--->選擇研發(fā)服務進行我們沙箱環(huán)境配置(測試環(huán)境)
沙箱環(huán)境會為我們提供如下信息進行仿真測試
還有我們需要的:------里面的一些秘鑰,進去之后支付寶會提供我們工具,傻瓜式生成就行
?
?
接下來我們進行java程序的編碼:
(1)支付寶對于一些安全的加密操作已經(jīng)幫我們進行了實現(xiàn),大大降低了我們開發(fā)時間需要我們Maven導入支付寶的sdk依賴 ,在官方的文檔中對于支付寶各種支付實現(xiàn)有很好的實例,我們可以下載下來進行copy
<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.1.0</version> </dependency>(2),引入我們的配置類(紅色部分寫入自己在支付寶后臺中的配置)
package com.pay.alipay.util.config;import java.io.FileWriter; import java.io.IOException;/* **類名:AlipayConfig*功能:基礎配置類*詳細:設置帳戶有關信息及返回路徑*修改日期:2017-04-05*說明:*以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據(jù)自己網(wǎng)站的需要,按照技術文檔編寫,并非一定要使用該代碼。*該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。*/public class AlipayConfig {// 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號public static String app_id ="2016091800539310";// 商戶私鑰,您的PKCS8格式RSA2私鑰public static String merchant_private_key = "很長很長的字符串";// 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。public static String alipay_public_key = "很長很長的字符串";// 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問public static String notify_url = "http://68a71d94.ngrok.io/alipay/notify";// 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問public static String return_url = "http://localhost:80";// 簽名方式public static String sign_type = "RSA2";// 字符編碼格式public static String charset = "utf-8";// 支付寶網(wǎng)關//public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";//(沙箱環(huán)境)// public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";//(正式環(huán)境)// 支付寶網(wǎng)關public static String log_path = "C:\\";/** * 寫日志,方便測試(看網(wǎng)站需求,也可以改成把記錄存入數(shù)據(jù)庫)* @param sWord 要寫入日志里的文本內(nèi)容*/public static void logResult(String sWord) {FileWriter writer = null;try {writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");writer.write(sWord);} catch (Exception e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}}(3)編寫Controller層調(diào)用service層進行獲取支付表單
@RequestMapping(value="/alipay",method =RequestMethod.GET)public void alipay(HttpServletRequest request,HttpServletResponse response) {String result =null;try {log.info("------->開始調(diào)用支付寶支付接口");//開始時間long starttime = System.currentTimeMillis();result =alipay.startAlipay();log.info("alipay支付請求結(jié)束,用時:"+ (System.currentTimeMillis() - starttime) + "毫秒");}catch(Exception e) {e.printStackTrace();}response.setContentType("text/html;charset=utf8");response.getWriter().write(result);//直接將完整的表單html輸出到頁面 response.getWriter().flush();response.getWriter().close(); }?(4)建立支付所需要的實體對象entity,我們將支付參數(shù)封裝在這里面,方便Json的轉(zhuǎn)換
package com.pay.entity;public class PayBizContent {//商戶訂單號,商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號,必填private String out_trade_no;//支付金額,,必填private String total_amount;//訂單名稱private String subject;//商品描述private String body;private String product_code;public String getProduct_code() {return product_code;}public void setProduct_code(String product_code) {this.product_code = product_code;}@Overridepublic String toString() {return "AlipayBizContent [out_trade_no=" + out_trade_no + ", total_amount=" + total_amount + ", subject="+ subject + ", body=" + body + ", timeout_express=" + timeout_express + "]";}//訂單失效時間,如果是十分鐘則是10m配置;private String timeout_express;public String getOut_trade_no() {return out_trade_no;}public void setOut_trade_no(String out_trade_no) {this.out_trade_no = out_trade_no;}public String getTotal_amount() {return total_amount;}public void setTotal_amount(String total_amount) {this.total_amount = total_amount;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getTimeout_express() {return timeout_express;}public void setTimeout_express(String timeout_express) {this.timeout_express = timeout_express;}}
(5)service 進行調(diào)用微信SDK
?
public String startAlipay() {//獲得初始化的AlipayClient,微信SDK提供的,直接使用即可AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json",AlipayConfig.charset, AlipayConfig.alipay_public_key,AlipayConfig.sign_type);//wap端支付AlipayTradeWapPayRequest alipayRequest=new AlipayTradeWapPayRequest();//*****************pc端支付用這個****************////AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url);alipayRequest.setNotifyUrl(AlipayConfig.notify_url);PayBizContent aliContent =new PayBizContent();aliContent.setTotal_amount("1290");//金額aliContent.setSubject("辣條");//商品名稱aliContent.setOut_trade_no("180458382060");//商戶訂單,必須是唯一的aliContent.setTimeout_express("10m");//過期時間為10m;//**************pc端類型用這個**********************// aliContent.setProduct_code("FAST_INSTANT_TRADE_PAY");aliContent.setProduct_code("QUICK_WAP_WAY");JSONObject json =new JSONObject();alipayRequest.setBizContent(json.toJSONString(aliContent));log.info("放入支付寶接口中的參數(shù)--->"+alipayRequest.getBizContent());try {//成功后返回一個form表單字符串String form = alipayClient.pageExecute(alipayRequest).getBody();log.info("AlipayServiceImpl-----調(diào)用支付寶返回結(jié)果:"+form);return form;} catch (AlipayApiException e) {log.error("AlipayServiceImpl----->支付寶生成表單錯誤");e.printStackTrace();return "調(diào)用失敗";}}?
轉(zhuǎn)載于:https://www.cnblogs.com/iscys/p/9514539.html
總結(jié)
以上是生活随笔為你收集整理的支付宝H5 与网页端支付开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(六)查找---多路查找树(2-
- 下一篇: 王者荣耀貂蝉的装备和铭文(貂蝉带什么铭文