Рубрики
Uncategorized

Пример платежной функции Alipay, реализованной с помощью PHP

Автор оригинала: David Wong.

В этой статье описывается платежная функция Alipay, реализованная с помощью PHP. Чтобы поделиться с вами для вашей справки, следующим образом:

При создании платежного интерфейса Alipay для приложения соберите содержимое следующим образом:

Интерфейс:

import('alipay.AopClient', EXTEND_PATH);
import('alipay.request.AlipayTradeAppPayRequest', EXTEND_PATH);
$aop = new \AopClient();
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = Config::get('alipay.app_id');
$aop->rsaPrivateKey = Config::get('alipay.rsa_private_key');
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = Config::get('alipay.alipay_rsa_public_key'); //Config::get('alipay.rsa_public_key'); //
$request = new \AlipayTradeAppPayRequest();
$bizcontent = json_encode([
  'body' = > red packet payment ',
  'subject' = > 'user red packet payment',
  'out_trade_no' => $orderSn,
  'timeout_express' => '30m',
  'total_amount' => $amount,
  'product_code' => 'QUICK_MSECURITY_PAY'
]);
$request->setNotifyUrl("https://" . $_SERVER['HTTP_HOST'] . "/api/callback/alipay");
$request - > setbizcontent ($bizcontent); // it's different from the normal interface call here. It uses SDK execute
$response = $aop->sdkExecute($request);
$return ['aliresponse '] = $response; // htmlspecialchars ($response); // htmlspecialchars are used to prevent the key parameter HTML from being escaped by the browser when outputting to the page. This problem will not exist in the actual printing to the log and HTTP transmission
$this->returnSuccess($return);

Обработка обратного вызова:

public function alipay()
{
    import('alipay.AopClient', EXTEND_PATH);
    $aop = new \AopClient();
    $aop->alipayrsaPublicKey = Config::get('alipay.alipay_rsa_public_key');// file_get_contents($_SERVER['DOCUMENT_ROOT']."/key/alipay/alipay_public_key.txt");
    $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
    if ($flag){
      //After passing the verification, verify the following parameters trade_ status、out_ trade_ no、total_ amount、seller_ ID
      if (isset($_POST['trade_status']) && ($_POST['trade_status'] == 'TRADE_SUCCESS' || $_POST['trade_status'] == 'TRADE_FINISHED') ) {
        //Business processing
      } else {
        $msg = var_export($_POST, true);
        $fileName = mt_rand(10,1000) .'00alisuccessAnother.log' ;
        file_put_contents($fileName, $msg);
      }
      echo "success";
    } else {
      $msg = var_export($_POST, true);
      $fileName = mt_rand(10,1000) .'00alicheckSignFail.log';
      file_put_contents($fileName, $msg);
    }
}

Вложение: Был вызван асинхронный обратный вызов платежей Alipay и WeChat

В последнее время компания разрабатывает платежные системы WeChat и Alipay. Предыдущая работа была выполнена, но когда принимается значение асинхронного обратного вызова, вызывается асинхронный обратный вызов, так что мои данные неоднократно сохранялись в базе данных. Я действительно чувствую, что моя тетя пришла и никак не может остановиться. Ха-ха, не садись больше за руль. Когда вы видите проблему и тщательно обдумываете ее, одно из решений, которое сразу приходит на ум, – это написать другой интерфейс в асинхронном обратном вызове. После каждого обратного вызова, получающего данные, запрашивайте базу данных, чтобы узнать, есть ли какие-либо данные. Если есть какие-либо данные, не сохраняйте их повторно. Но подумайте хорошенько, нет, это лекарство от симптомов или от корня. Нет, поскольку есть проблема, должны быть коренные причины и правильные решения. Итак, чтобы найти основу, достаточно просмотреть документ:

1. Документация по Alipay Вот документ об асинхронном обратном вызове Alipay: нажмите открыть официальную ссылку.

Функции страницы асинхронного уведомления сервера Страница асинхронного уведомления сервера (notify) должна быть гарантирована (URL) без каких-либо символов, таких как пробел, HTML-тег, информация об исключениях, предоставляемая системой разработки; Alipay отправляет информацию об уведомлении в режиме POST, поэтому способ получения параметров на странице следующий: запрос. Форма (“out_ trade_ нет”),$_ СООБЩЕНИЕ[“out_ trade_ нет”]; Alipay инициативно объявил, что способ будет активирован. Только когда транзакция существует в управлении транзакциями Alipay и состояние транзакции изменяется, Alipay инициирует уведомление сервера таким образом (статус транзакции мгновенного прибытия-это состояние “ожидание оплаты покупателем”). Никакого уведомления отправлено не будет); Взаимодействие между серверами, в отличие от уведомления о синхронизации перехода на страницу, может отображаться на странице, этот режим взаимодействия невидим; Первое изменение состояния транзакции (когда статус транзакции немедленно завершен в учетной записи прибытия) не только вернет результат синхронизации, но и страница асинхронного уведомления сервера получит уведомление о результатах обработки Alipay. Программа должна распечатать “успех” (без кавычек) после выполнения. Если обратная связь продавца с персонажами Alipay не превышает 7 символов, сервер Alipay будет продолжать переиздавать уведомление более чем до 24 часов и 22 минут. Как правило, 8 уведомлений должны быть заполнены в течение 25 часов (частота интервалов уведомлений обычно составляет: 4 м, 10 м, 10 м, 1 ч, 2 ч, 6 ч, 15 ч); После выполнения программы страница не может перейти. Если страница пропускается, Alipay не получит символ успеха. Сервер Alipay будет судить о том, что он запустит исключение для программы страницы и повторно опубликует уведомление о результатах. Файлы cookie, сеансы и т. Д. произойдет сбой на этой странице, т. е. эти данные не могут быть получены; Отладка и работа в этом режиме должны выполняться на сервере, то есть доступ в Интернет возможен; Функция этого метода в основном заключается в предотвращении потери заказа, то есть уведомление о синхронизации перехода на страницу не обрабатывает обновление заказа, оно обрабатывает его; Когда продавец получает асинхронное уведомление с сервера и распечатывает успех, параметр асинхронного уведомления notify с идентификатора server_ будет недействительным. То есть, при отправке одного и того же асинхронного уведомления в Alipay (в том числе продавцы не печатали успешно, что привело к повторному уведомлению Alipay) параметр асинхронного уведомления сервера notify_ Идентификатор одинаков.

Видите ли, программа должна распечатать успех, Alipay прекратит кровотечение, когда я снова оглянусь на программу, я обнаружил, что не вернулся к успеху, поэтому после завершения программы вернитесь к успеху. Из-за PHP, который я использую, после окончания программы. Используйте следующее предложение.

eg:
echo "success";

2. Документы Wechat Нажмите, чтобы открыть официальную ссылку

После завершения оплаты wechat отправит соответствующие результаты платежа и информацию о пользователе продавцу, которому необходимо получить, обработать и вернуть ответ. После завершения оплаты wechat отправит соответствующие результаты платежа и информацию о пользователе продавцу, которому необходимо получить, обработать и вернуть ответ. Когда wechat взаимодействует с wechat wechat взаимодействует с внутренними уведомлениями, если wechat получает ответ от продавца, который не удался или работает сверхурочно, wechat считает, что уведомление не удалось, wechat будет периодически повторно запускать уведомление с помощью определенной стратегии, чтобы максимально повысить вероятность успеха уведомления, но wechat не гарантирует, что уведомление будет работать. (частота уведомлений составляет 15/15/30/180/1800/1800/1800/1800/3600, единица измерения: Вторая) Примечание: одно и то же уведомление может быть отправлено в торговую систему несколько раз. Торговая система должна уметь правильно обрабатывать повторяющиеся уведомления. Рекомендуется проверить статус соответствующих бизнес-данных при получении уведомления для обработки и оценить, было ли уведомление обработано. Если он не был обработан, обработайте его еще раз. Если он был обработан, непосредственно верните результат успешно. Перед проверкой и обработкой состояния бизнес-данных следует использовать блокировку данных для контроля параллелизма, чтобы избежать путаницы в данных, вызванной повторным вводом функций. Перед проверкой и обработкой состояния бизнес-данных следует использовать блокировку данных для контроля параллелизма, чтобы избежать путаницы в данных, вызванной повторным вводом функций. Специальное напоминание: торговая система должна провести проверку подписи для содержания уведомления о результатах платежа и проверить, соответствует ли возвращенная сумма заказа сумме заказа на стороне продавца, чтобы предотвратить утечку данных, приводящую к “ложному уведомлению” и потере капитала. Технические специалисты могут войти в фоновое сканирование wechat merchant, чтобы присоединиться к группе сигнализации интерфейса.

Видишь? Этот документ wechat также должен возвращать сообщение на сервер wechat после асинхронного уведомления wechat. Однако все форматы данных wechat являются XML. Поэтому мы возвращаем данные в wechat.

echo ""; 

При возврате проблем с форматом нет. Может быть, есть проблема с выводом. Используйте следующие методы:

echo exit('');

Это так просто, что сразу же прекратились WeChat и Alipay blood, идеальный финал!

Ссылка на ссылку:

Асинхронное уведомление о результатах оплаты мобильного веб-сайта https://docs.open.alipay.com/203/105286/

Демо и SDK платежного сервера ПРИЛОЖЕНИЙ https://docs.open.alipay.com/54/106370/

Справочная статья:

Справочная статья:

Для получения дополнительной информации о PHP, читатели, которые интересуются PHP, пожалуйста, ознакомьтесь со следующими разделами: краткое описание навыков разработки PHP wechat, краткое описание использования PHP curl, краткое описание навыков сетевого программирования PHP, краткое описание использования строк PHP, краткое описание навыков работы с данными в формате JSON в PHP и краткое описание навыков работы с PHP для XML-файлов

Я надеюсь, что эта статья будет полезна для программирования на PHP.