Я не совсем уверен, насколько популярным или получит ли этот вопрос какие-либо ответы, так как этот вопрос больше связан с китайскими разработчиками, чем с разработчиками за пределами, однако в настоящее время я работаю над интеграцией серверных сценариев для Alipay для получения мобильного Строки запроса успеха.
Я успешно смог предоставить моим мобильным парням (прищурив глаза в ужасном API Alipay) строки, необходимые им для оплаты Alipay. Это следует за этим форматом [идентифицируемая информация удерживается]:
_input_charset=\"utf-8\"&body=\"Order Number: 20141121_80\"&it_b_pay=\"30m\"¬ify_url=\"http://somePublicFacingIP:8080/index.php?route=payment/alipay/callback\"&out_trade_no=\"80\"&partner=\"2088611100000000\"&payment_type=\"1\"&seller_id=\"[email protected]\"&service=\"mobile.securitypay.pay\"&subject=\"Order Number: 20141121_80\"&total_fee=\"10.01\"
Приведенная выше строка используется API-интерфейсом Android / iOS в классах оплаты Alipay, затем подписывается закрытым ключом и отправляется в Alipay. После получения запроса Alipay они проверят строку нашего параметра и отправят обратно коды состояния в диапазоне от 6000 до 9000.
Мы до сих пор получили resultStatus=9000
в строке, которая возвращается мобильным парням, что указывает на успешный платеж (и, проверив историю кошелька Alipay, мы действительно видим, что мы сделали платеж)
result = {
memo = "";
result = "_input_charset=\"utf-8\"&body=\"\U4ea4\U6613\U53f7 20141124_80\"&it_b_pay=\"30m\"¬ify_url=\"http://publicFacingIP:8080/index.php?route=payment/alipay/callback\"&out_trade_no=\"80\"&partner=\"208861100000000\"&payment_type=\"1\"&seller_id=\"[email protected]\"&service=\"mobile.securitypay.pay\"&subject=\"\U65b0\U5143\U7d20\U7f51\U4e0a\U70b9\U9910 - \U8ba2\U5355\U7f16\U53f7 20141124_87\"&total_fee=\"0.01\"&success=\"true\"&sign_type=\"RSA\"&sign=\"reallyLongSignedString\"";
resultStatus = 9000;
}
Вот где все перестает работать:
Alipay теоретически должен отправлять строку результата (с большим количеством параметров, чем показано выше) также на наш notify_url
который мы указали в наших входных параметрах, которые наш сервер должен проверить, это Alipay. Эта строка результата также будет использоваться для обновления нашего бэкэнда, чтобы мы знали, что заказ действительно был успешным.
По какой-то причине Alipay просто не отправляет результирующую строку в указанный notify_url
,
Что я пробовал:
Положить var_dump()
входов POST в payment/alipay/callback
, Не получил любой Запросы.
Я попытался свернуть мой публичный IP-адрес payment/alipay/callback
и я знаю, что это работает, потому что я получаю запросы, так что исключает, мой или нет callback
URL работает или нет.
Выдернуть мои волосы. Я проверил платеж еще раз, и я могу подтвердить, что снятие волос не решило проблему.
Как часто говорят китайские разработчики, есть ли какие-нибудь «大 神» (или гуру), которые могли бы предложить мне какой-нибудь совет и / или решение?
Хорошо, я только что позвонил в службу поддержки Alipay.
Мы убедились, что они отправили запрос на мой notify_url
, но у моего класса уведомлений был фрагмент кода перенаправления PHP, так что он просто перенаправлялся на мою целевую страницу (результатом их был код HTML моей главной страницы).
Итак, урок усвоен:
Не помещайте перенаправления в notify_url
Обратитесь в службу поддержки Alipay — они могут помочь больше, чем вы думаете (хорошо. Меньше, чем я думаю, но они все же помогли).
Я также реализовал их неприятный код спагетти для класса Notify (который отвечает за обработку возвращаемых параметров). Код не очень красивый, все отступы неверны, а комментарии на китайском .. Но похоже, что это сработает. Итак, мы отправим его сначала, а затем рефакторинг && перевести позже ..
Других решений пока нет …