Давайте жаловаться:
Интерфейс демонстрации Alipay и WeChat и документов действительно слишком сложно понять. Это грязно, и я не знаю, где найти то, что я хочу. В последние дни нашей компании необходимо сделать аналогичные события. Как пионер, я взял на себя инициативу в решении проблемы интеграции Java Alipay Payment и WeChat платежных интерфейсов.
Наша рабочая среда: веб -сайт JSP + платежный интерфейс. Текущий интерфейс Alipay - 20160912, а WeChat - V3 версия. Если вы столкнетесь с обновлением версии, пожалуйста, свяжитесь с сотрудниками обслуживания клиентов соответствующей организации, чтобы обновить.
Эта статья представляет интерфейс JSP+Alipay, который не является оригинальным.
Помните о новичках:
1. Адрес интерфейса и параметры, используемые в этой статье, являются адресом песочницы. Независимо от того, используете ли вы песочницу или официальный адрес, обязательно проверьте использование адреса и параметров интерфейса и не принимайте его как должное.
2. В этой статье используется пакет JAR:
Alipay-Sdk-Java20160912220103.Jar
Commons-Codec-1.6.jar
Commons-Httpclient-3.0.1.jar
Commons-Logging-1.1.1.jar
FASTJSON-1.2.7.Jar
json-lib-2.2.3-jdk13.jar
json.jar
jsp-api.jar
Сервлет-Апи.JAR
иллюстрировать:
Alipay-Sdk-Java-официальный платеж SDK. Пожалуйста, загрузите его на официальном сайте. В этой статье используется версия 20160912
Домашняя страница звонка:
<body> <% cspay pay = new cspay (); pay.dopost (запрос, ответ); %> </body>
Пакет com.luozhuang.alipay; импортировать java.util.hashmap; импортировать java.util.map; Импорт com.alibaba.fastjson.json; импорт com.alipay.api.alipayapiexception; импорт com.alipay.api.alipayclient; импорт com.alipay.api.defaultalipayclient; импорт com.alipay.api.internal.util.stringutils; Import com.alipay.api.request.alipaytradecancelrequest; Импорт com.alipay.api.request.alipaytradepayrequest; импорт com.alipay.api.request.alipaytradeprecreaterequest; Import com.alipay.api.request.alipaytradequeryrequest; Import com.alipay.api.request.alipaytraderefundrequest; Import com.alipay.api.request.alipaytradewappayrequest; Импорт com.alipay.api.response.alipaytradecancelresponse; импорт com.alipay.api.response.alipaytradepayresponse; Import com.alipay.api.response.alipaytradeprecreateresponse; Импорт com.alipay.api.response.alipaytradequeryresponse; Импорт com.alipay.api.response.alipaytraderefundresponse; открытый класс alipayclientfactory {private static final alipayclient client = new defaultalipayclient (config.url, config.appid, config.rsa_rrivate_key, config.format, config.charset, config.alipay_public_key); Public Static AlipayClient GetaLipayClientInstance () {return Client; } /** * appauthtoken * Если ISV вызывает личный платежный интерфейс вместо продавца, APP_AUTH_TOKEN, полученный после того, как торговец разрешено, должен быть доставлен с ним; if the merchant applies for face-to-face payment, he will pass null bizContent * Request parameters of JSON format merchant*/ // Mobile web payment website payment public String ydAndPc_Pay(Map<String, String> maps) throws AlipayApiException { AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest(); String notifyUrl = maps.get ("notifyUrl"); String returnUrl = maps.get ("returnUrl"); // фоновый обратный вызов if (! StringUtils.isempty (notifyurl)) {alipayrequest.setnotifyurl (notifyurl); // public parameter maps.remove ("notifyurl"); // Bizcontent не требует общедоступных параметров. } // обратный вызов страницы if (! StringUtils.isempty (returnUrl)) {alipayrequest.setreturnurl (returnUrl); // public parameter maps.remove ("returnUrl"); } String bizcon = json.tojsonstring (maps); alipayrequest.setbizcontent (bizcon); String form = ""; try {form = alipayclientfactory.getalipayclientinstance () .pageexecute (alipayrequest) .getbody (); } catch (alipayapiexception e) {form = "err"; e.printstacktrace (); } // Вызовите SDK, чтобы генерировать форму возврата формы; } // Запросить статус заказа Public alipaytradequeryresponse Query (string appauthtoken, string bizcontent) бросает alipayapiexception {alipaytradequeryrequest request = new alipaytradequeryrequest (); request.putothertextParam ("app_auth_token", appauthtoken); request.setBizContent (BizContent); return alipayclientfactory.getalipayclientinstance (). execute (request); } // платеж Barcode public alipaytradepayresponse pay (string appauthtoken, string bizcontent) бросает alipayapiexception {alipaytradepayrequest request = new alipaytradepayrequest (); request.putothertextParam ("app_auth_token", appauthtoken); request.setBizContent (BizContent); return alipayclientfactory.getalipayclientinstance (). execute (request); } // сканировать код для оплаты публичного AlipayTradePrecReaterSponse Precreate (String appAuthtoken, String BizContent) бросает AlipayApiexception {alipaytradeprecreaterequest request = new alipaytradeprecreaterequest (); request.putothertextParam ("app_auth_token", appauthtoken); request.setBizContent (BizContent); return alipayclientfactory.getalipayclientinstance (). execute (request); } // Отзыв заказа PublicTradeCanceLresponse Cancel (String appauthtoken, String BizContent) бросает AlipayApiexception {alipaytradecancelrequest request = new alipaytradecancelrequest (); request.putothertextParam ("app_auth_token", appauthtoken); request.setBizContent (BizContent); return alipayclientfactory.getalipayclientinstance (). execute (request); } // Подать заявку на возврат общедоступного AlipayTradereFundResponse refund (String appauthtoken, String BizContent) бросает AlipayApiexception {alipayTradereFundRequest request = new alipaytraderefundRequest (); request.putothertextParam ("app_auth_token", appauthtoken); request.setBizContent (BizContent); return alipayclientfactory.getalipayclientinstance (). execute (request); } @Suppresswarnings ("unared") public static void main (string [] args) {alipayclientfactory c = new alipayclientfactory (); try {map <string, string> map = new hashmap <string, string> (); map.put ("out_trade_no", "20160914113218"); String bizcontent = json.tojsonstring (map); System.err.println (BizContent); Alipaytradequeryresponse rp = c.query (null, bizcontent); } catch (alipayapiexception e) {e.printstacktrace (); }}} Пакет com.luozhuang.alipay; Public Class Config {// Developer применяет закрытый ключ. Java настраивает формат PKCS8, а язык PHP/.NET настраивает исходный закрытый ключ в файле rsa_private_key.pem. публичная статическая финальная строка rsa_rrivate_key = "luozhuang"; // шлюз запроса интерфейса. Личные интерфейсы платежа, запроса, возврата и отзывы являются фиксированными значениями. // Appid Applicant, пока ваше приложение содержит интерфейс платежного лица лица и находится в состоянии Activate, вы можете использовать соответствующую приложение этого приложения. Разработчики могут войти в приложение, связанное с центрами управления платформой, чтобы просмотреть публичную статическую конечную строку Appid = "luozhuang"; // кодированный набор символов. По умолчанию UTF-8 Public Static Final String charset = "UTF-8"; // возвращает формат. По умолчанию JSON Public Static Final String Format = "json"; // Alipay Public Key используется для получения синхронной информации о возврате для проверки, чтобы проверить, является ли это информацией, отправленной Alipay. Общественная статическая финальная строка alipay_public_key = "luozhuang"; } Пакет com.luozhuang.alipay; импортировать java.io.ioexception; импортировать java.util.hashmap; импортировать java.util.map; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; импорт com.alipay.api.alipayapiexception; / ** * Класс реализации сервиса CSPAY */ Public Class CSPAY расширяет httpservlet {private static final long serialversionuid = 1l; / ** * @see httpservlet#doget (httpservletrequest, httpservletresponse * response) */ public void doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {dopost (запрос, ответ); } / ** * @see httpservlet#dopost (httpservletrequest, httpservletresponse * response) * / public void dopost (httpservletrequest, httpservletrespons HashMap <String, String> (); maps.put ("out_trade_no", utildate.getordernum ()); maps.put ("total_amount", "0,01"); maps.put ("субъект", "iPhone6 16g"); maps.put ("body", "iPhone6 16g"); maps.put ("product_code", "Quick_wap_pay"); // Ключ из следующих двух параметров не следует записывать случайным образом с помощью maps.put ("returnUrl", "http://domain.com/callback/return_url.jsp"); maps.put ("notifyurl", "http://domain.com/callback/notify_url.jsp"); try {alipayclientfactory ali = new alipayclientfactory (); String form = ali.ydandpc_pay (maps); if (! form.equals ("err")) {response.setContentType ("text/html; charset = utf-8"); response.getWriter (). write (form); // непосредственно выводить полную форму html на страницу response.getwriter (). flush (); }} catch (alipayapiexception e) {e.printstacktrace (); }}} Пакет com.luozhuang.alipay; импортировать java.util.arraylist; импортировать java.util.collections; импортировать java.util.list; импортировать java.util.map; Открытый класс csutil { / ** * Сортировать все элементы массива и разбивать их в строки в «Параметрах = значение параметра», шаблон * * @param params * Группа параметров, которые необходимо сортировать и участвовать в символе сплайсинга * @return String после Splicing * / public Static StringString (map <string> parames) {list <string> new = keys = keys = keys = keys = keys = keys = keys = keys = keys = Arraylist <string> (params.keyset ()); Collections.Sort (ключи); String prestr = ""; for (int i = 0; i <keys.size (); i ++) {string key = keys.get (i); String value = params.get (key); if (i == keys.size () - 1) {// Когда сплайсинг, последний и символ не включен prestr = prest + key + "=" + value; } else {prest = prest + key + "=" + value + "&"; }} return prest; }} Пакет com.luozhuang.alipay; импортировать java.util.date; импортировать java.util.random; импортировать java.text.simpledateformat; импортировать java.text.dateformat; / * * * Имя класса: utildate * Функция: Пользовательский класс заказа * Подробности: Класс инструментов, который можно использовать для получения дат системы, номеров заказа и т. Д. Торговцы могут писать в соответствии с потребностями своего собственного веб -сайта и в соответствии с техническими документами, и нет необходимости использовать этот код. *Этот код предназначен только для изучения и исследования интерфейса Alipay, и предоставляется только в качестве ссылки. */ public Class utildate {/ ** Год, месяц, день, час, минута и второй (без подчеркивания) yyymmddhhmmss*/ public Static Final String dtlong = "yyymmddhhmmss"; / ** Полный рабочий день yyyy-mm-dd HH: MM: SS*/ Public Static Final String Simple = "yyyy-mm-dd HH: MM: SS"; / ** Год, месяц, день, (нет подчеркивания) yyyymmdd*/ public static final String dthort = "yyyymmdd"; / *** Возвращает текущее время системы (точное в миллисекунд), как уникальный номер заказа* @return* Текущее время системы в yyyymmddhhmmss format*/ public static String getOrdernum () {date = new Date (); DateFormat df = new SimpleDateFormat (dtlong); return df.format (date); } / ** * Получить текущую дату системы (точной до миллисекундов), формат: yyyy-mm-dd hh: mm: ss * @return * / public static String getDateFormatter () {date = new Date (); DateFormat df = new SimpleDateFormat (Simple); return df.format (date); } / ** * Получить текущий год, месяц, день системы (точный до дня), формат: yyyyMmdd * @return * / public static String getDate () {date Date = new Date (); DateFormat df = new SimpleDateFormat (dtShort); return df.format (date); } / *** Сгенерировать случайное трехзначное число* @return* / public static String getThree () {random Rad = new Random (); вернуть rad.nextint (1000)+""; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.