Говоря о Wechat Pay, я считаю, что все знакомы с этим, но когда мы хотим завершить эту программу, как должны писать и настроить наши программисты? Не волнуйтесь, сегодня редактор нового технологического канала этой ошибки привнес вам пример, давайте перейдем к следующей статье, чтобы узнать больше!
Введение: дистрибьютор, как снять наличные деньги из WeChat Business?
Платите непосредственно с WeChat.
Реализация выглядит следующим образом:
WeChat Payment Configuration
/*WeChat платеж*/'pay_weixin' => array ('appid' => 'xxxx', 'appsecret' => 'xxxxxx,' mchid '=>' 1283301801 ', // merchant number' key '=>' zhudianbaodiandozhudianbao0527 ', ceal' => 'zhudianbaodiandozhudbao0527',//apichant key 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap 'ap' ap '= zhudianbaodiandozhudianbao0527 'Conf/cert/apiclient_cert.pem', // Сертификат торговцев apiclient_cert.pem 'apiclient_key' => 'conf/cert/apiclient_key.pem', // Сертификат торговцев apiclient_key.pem)ArrayToxml
/*** массив к XML*/Function ArrayToxml ($ arr) {$ xml = "<xml>"; foreach ($ arr as $ key => $ val) {if (is_numeric ($ val)) {$ xml. = "<". $ key. ">". $ val. "</". $ key. ">"; } else $ xml. = "<". $ key. "> <! [cdata [". $ val. "]]> </". $ key. ">"; } $ xml. = "</xml>"; возврат $ xml;}Используйте сертификат, чтобы отправить XML в соответствующий URL -адрес интерфейса в сообщении
/*** Функция: используйте сертификат для отправки XML в соответствующий URL интерфейса*/функция postxmlsslcurl ($ xml, $ url, $ second, $ cert, $ key) {$ ch = curl_init (); // Время тайм-аута curl_setopt ($ ch, curlopt_timeout, $ second? $ Second: $ this-> timeout); // Установить прокси здесь, если есть один // curl_setopt ($ ch, curlopt_proxy, '8.8.8.8'); // curl_setopt ($ ch, curlopt_proxyport, 8080); curl_setopt ($ ch, curlopt_url, $ url); curl_setopt ($ ch, curlopt_ssl_verifypeer, false); curl_setopt ($ ch, curlopt_ssl_verifyhost, false); // установить заголовок curl_setopt ($ ch, curlopt_header, false); // Установить результат в виде строки и вывода на экран curl_setopt ($ ch, curlopt_returntransfer, true); // Установить сертификат // Использовать сертификат: сертификат и ключ, который он принадлежит двум файлам .pem соответственно // формат по умолчанию - это pem, вы можете аннотировать curl_setopt ($ ch, curlopt_sslcerttype, 'pem'); curl_setopt ($ ch, curlopt_sslcert, $ cert); // формат по умолчанию - это PEM, вы можете аннотировать curl_setopt ($ ch, curlopt_sslkeytype, 'pem'); curl_setopt ($ ch, curlopt_sslkey, $ key); // Метод отправки POST curl_setopt ($ ch, curlopt_post, true); curl_setopt ($ ch, curlopt_postfields, $ xml); $ data = curl_exec ($ ch); // вернуть результат, если ($ data) {curl_close ($ ch); вернуть $ this-> xmltoarray ($ data); } else {$ error = curl_errno ($ ch); Echo "ошибка завивки, код ошибки: $ error". "<br>"; curl_close ($ ch); вернуть ложь; }}Предприятия платят физическим лицам
// Enterprise оплачивает отдельную публичную функцию Paytouser ($ params, $ key, $ apcent_cert, $ apiclient_key) {$ url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; // Обнаружение необходимых параметров, если ($ params ["partner_trade_no"] == null) {// exit ("refund приложение, необходимые параметры partner_trade_no!". "<br>"); } elseif ($ params ["openId"] == null) {exit ("refund приложение интерфейс, требуемые параметры OpenID!". "<br>"); } elseif ($ params ["check_name"] == null) {// no_check: нет реальной проверки имени force_check: сильная проверка реального имени (пользователи без реального аутентификации имени не могут проверить, а передача не может быть передана) опция_чека: только пользователи, которые подтверждают, подтверждены (пользователи, которые не могут быть выпущены, не могут быть подтверждены. Интерфейс, требуемый параметр check_name отсутствует! "." <br> "); } elseif (($ params ["check_name"] == 'force_check' или $ params ["check_name"] == 'option_check') && ($ params ["re_user_name"] == null)) {// реальное имя пользователя платежа. Exit («Возвращение к приложению, необходимый параметр re_user_name отсутствует!». «<br>»); } elseif ($ params ["sutr"] == null) {exit ("refund приложение интерфейс, требуемая сумма параметра отсутствует!". "<br>"); } elseif ($ params ["desc"] == null) {exit ("refund приложение интерфейс, требуемый параметр desc!". "<br>"); } $ params ["mch_appid"] = $ this-> appid; // идентификатор публичной учетной записи $ params ["mchid"] = $ this-> mchid; // торговый номер $ params ["nonce_str"] = $ this-> createNonCestR (); // случайная строка $ params ['spbill_create_crete_ip'] = $ $ _seserver ['] releterver ['] releteRver ['] releteRver ['] releteRVERVER. ':: 1'? '192.127.1.1': $ _server ['remote_addr']; // получить ip $ params ["sign"] = $ this-> getsign ($ params, $ key); // подпись $ xml = $ this-> arraytoxml ($ params); Возврат $ this-> postxmlsslcurl ($ xml, $ url, false, $ apcent_cert, $ apiclient_key);}Бизнес оплата
Приватная функция _Enterprisepay ($ number, $ member_id, $ summe, $ desc) {// get openid $ wxuser_id = m ('member')-> где (array ('id' => $ meman_id))-> getfield ('wxuser_id'); $ openid = m ('wxuser')-> где (array ('id' => $ wxuser_id))-> getfield ('openid'); $ pay = c ('pay_weixin'); Import ('@. action.wxdevelop'); $ enterprise = new wxenterprise ($ pay ['appid'], $ pay ['appsecret'], $ pay ['mChid']); $ params = array ('partner_trade_no' => $ number, 'openid' => $ opend, 'check_name' => 'no_check', 'summ' => $ umm, // total 'desc' => $ desc,); $ result = $ enterprise-> paytouser ($ params, $ pay ['key'], $ pay ['apiclient_cert'], $ pay ['apiclient_key']); вернуть $ result;}Вывод дистрибьютора процессов
Приватная функция _handle ($ trueName, $ price) {// Обработка дистрибьютора withrawal $ seatdrawid = date ("ymdhis"). strval (rand (1000, 9999)); $ data = array ('shipdrawid' => $ shipdrawid, 'store_id' => $ this-> store_id, 'member_id' => $ this-> member_id, 'trueName' => $ trueName, 'цена' => $ price, 'addtime' => time ()); // нет аудита if ($ price> = c ('wietdraw_uncheck_value')) {$ data ['uead_check'] = 0; $ data ['status'] = 1; if ($ this-> shipdrawmodel-> add ($ data)) {$ result = $ this-> _ enterprisepay ($ shipdrawid, $ this-> member_id, $ price * 100, 'distribution ('. $ trueName. ') seakdraw'); // После ошибки в платежной информации необходимо рассмотреть, если ($ result ['return_code']! = 'Успех') {$ this-> wietdrawmodel-> где (Array ('shipdrawid' => $ seakdrawid))-> save (array ('nead_check' => 1, '=> 0))); $ this-> grand ('успех', 2); } else {// Установить номер транзакции weChat $ this-> shipdrawmodel-> where (array ('weatdrawid' => $ shipdrawd))-> save (array ('платеж_no' => $ result ['платеж_no'])); // увеличить поток комиссии, чтобы быть исправленным $ data = array ('store_id' => $ this-> store_id, 'user_type' => 2, 'user_id' => $ this-> shop_id, 'trade_type' => 2, 'trade_no' => $ shipdrawid, 'price' =-$ prigh 'addtime' => time ()); M ('Twitter_log')-> add ($ data); // уменьшить соответствующие комиссионные m ('member')-> где (array ('id' => $ this-> member_id))-> setinc ('Money',-$ price); $ this-> ressage ('успех', 1); // Отправить Комиссию Изменение сообщений импорт ('@. Action.tmplmsg'); $ tmplmsg = new tmplmsg (); $ tmplmsg-> send (tmplmsg :: pright_change, $ this-> member_id, array ('token' => $ this-> token, 'intro' => 'Distribution Commission Transfer', 'Price' => $ Price, 'Business' => Business))); }} else {$ this-> error ('ошибка информации об отмене наличных!'); }} // требуется просмотр иначе {$ this-> witdrawmodel-> add ($ data); $ this-> grand ('успех', 2); }}Предоставляет функцию предприятий платить пользователям, поддерживает предприятия для оплаты через интерфейс API или эксплуатировать платеж через веб -функцию платежной платформы WeChat.
Добрые советы:
◆ Платите тому же реальному пользователю, ежедневный лимит для одной транзакции составляет 2 Вт/2W
◆ Оплата тем же пользователю, не имеющему реального, с одной транзакцией и единым ежедневным лимитом 2000/2000
◆ Общий лимит оплаты для продавца в тот же день составляет 100 Вт.
◆ Только припасы, которые были связаны с торговым номером, поддерживаются;
◆ Для целевых пользователей оплаты пользователи, которые были аутентифицированы Wechat Pay, могут обеспечить функцию проверки своих реальных имен. Пользователи, которые не аутентифицировали реальные имена, не могут проверить. Предприятия могут выбрать тип проверки на основе уровня безопасности их собственного бизнеса;
◆ Сумма платежа должна быть меньше или равна сумме, доступной в настоящее время для торговца;
◆ Для оплачиваемых записей предприятия могут просмотреть соответствующие данные с помощью платежного запроса корпоративного платежа.
Прибытие
Фонды платежей введут изменение целевого пользователя (WeChat-I-Wallet-Change). WeChat Pay сделает уведомление об изменениях в счете, и будут отображаться данные о доходах и расходах.
Добрые советы:
Для исторической клиентской версии учетной записи изменения фонды будут входить в учетную запись Red Convelope пользователя, а WeChat Pay уведомит пользователей без каких -либо сообщений, а предприятия могут самостоятельно охватить пользователей.
Ссылка на интерфейс: https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
Требуется сертификат
Двухсторонний сертификат требуется для запроса.
Пример данных:
<xml> <mch_appid> wxe062425f740c30d8 </mch_appid> <mchid> 10000098 </mchid> <nonce_str> 3pg2j4iltkch16cq2502si8znmt M67VS </nonce_str> <partner_trade_no> 100000982014120919616 </partner_trade_no> <poneid> oho4gt7wvpxit1a9gjfamymiz Y1s </openid> <ceck_name> option_check </check_name> <Re_user_name> Zhang San </re_user_name> <сумма> 100 </anture> <cesc> Happy Holiday!
Успешный пример:
<xml> <return_code> <! [cdata [success]]> </return_code> <return_msg> <! [cdata []]> </return_msg> <mch_appid> <! [cdata [wxec38b8ff840 bd989]]> </mch_appid> <mchid> <! [CDATA [10013274]]> </mchid> <dinfit_info> <! [cdata []]> </device_info> <nonce_str> <! [CDATA [lxudzmnr jpcxzxlx0q]]> </nonce_str> <sulte_code> <! [CDATA [Success]]> </result_code> <party_trade_no> <! [CDATA [100135742015051915265824 41]]> </partner_trade_no> <wally_no> <! [CDATA [1000018301201505190181489473]]> </платеж_не> <wally_time> <! [CDATA [2015-05-19 15:26:59]]> </платеж_ времени> </xml>
Пример ошибки:
<xml> <return_code> <! [cdata [Fail]]> </return_code> <return_msg> <! [Cdata [Система занята, попробуйте еще раз Позже.]]> </return_msg> <sulte_code> <! [cdata [Fail]]> </result_code> <err_code> <! [cdata [SystemError]]]> </err_code> <err_code_des> <! [cdata [Система занята, пожалуйста, попробуйте позже.]> </err_code_des>
For more information about PHP related content, please check out the topics of this site: "Summary of PHP WeChat Development Skills", "Summary of PHP encoding and transcoding operation techniques", "Summary of PHP network programming techniques", "Introduction to PHP basic syntax tutorial", "Summary of php string usage", "Introduction to PHP database operation tutorial" and "Summary of common php database operation методы "
Я надеюсь, что подробное объяснение метода реализации оплаты счета WeChat Enterprise в PHP, описанном в этой статье, будет полезно для всех, чтобы изучить программирование PHP. Я надеюсь, что все будут продолжать поддерживать неправильный новый канал технологии!