Недавно разработка платежа с публичным аккаунтом WeChat была изучена в течение нескольких дней, потому что это было сделано впервые, и он достиг только уровня функции реализации
Общая оплата общественного счета WeChat на самом деле очень проста, и он примерно разделен на три шага. Первый шаг должен быть получен путем разрешения пользователя; Следующее вводит процесс разработки каждого шага.
Прежде всего, необходимо уточнить, что оплата общественного аккаунта WeChat является оплатой веб -версии, поэтому необходимо на один шаг больше авторизации WeChat, чем приложение, непосредственно полученное WeChat Payment. То есть вам нужно получить OpenID пользователя. Тип транзакции, используемой публичной учетной записью WeChat, является JSAPI, поэтому документ интерфейса Unified Order четко записан на
Поэтому мы должны получить OpenID, и в то же время мы можем справиться с какой -то логикой, которая нам нужна. Есть два способа получить разрешение пользователя: 1.scope = snsapi_base;
Область SNSAPI_BASE
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&rdirect_uri=http%2fchong.qq.com%2fphpphp%2findex.php%3fd%3d%26c% Aytitle% 3D1%26VB2CTAG%3D4_2030_5_1194_60 & response_type = code & scope = snsapi_base & state = 123#weChat_redirect
Область SNSAPI_USERINFO
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A% 2f%2fnba. WeChat_redirect
Официальный документ WeChat также имеет подробное объяснение каждого параметра, и я тщательно объясню ключевые параметры. Прежде всего, Appid не так много, чтобы сказать, что Appid of Your WeChat общедоступной учет. Вы можете сшивать необходимые вам параметры. Параметры состояния могут быть поняты как расширенные поля. Ниже приведен код клип OpenID.
// openid httpclientutil util = httpclientutil.getinstance (); , Wxpayconfig.appsecret); /Sns/oauth2/access_token ", null, map); logger.info (" returnstr: [" + returnstr +"] "); accessstoken at = json.parseobject (returnstr, accessstoken.c lass);Accesstoken.java
Общественный класс accessstoke { Return expires_in;} public void setexpires_in (string expires_in) {this.expires_in = expires_in; OpenId;} public void setoPenid (string openId) {this.openid = openid;} public String e () {return acpope;} public void setScope (string acpope) {this.scope = scope;} public String getUnionId () {return UnionId;} public void setUnionId (String UnionId) {this.UnionId = UnionId; OpenID = " + openID +", scope = " + scope +", UnionId = " + UnionId +"] "]"] "]"] "]"] "]"] "]"Во -вторых, после того, как мы получили OpenID, мы можем выполнить следующее объединенное размещение заказов. Документ единого интерфейса на WeChat более подробный, и я не буду представлять конкретное значение параметра. Наиболее интуитивно понятный код опубликован ниже, особенно напоминающий, что вы должны обратить внимание на правильную подпись. Ключ, используемый в подписи, не является приложением, а торговой ключ, который вы определили при применении.
// Порядок wxpaysendata data = new wxpaysenddata (); ; IP); псевдоним ("xml", wxpayreturndata.class);Unifiedorderservice.java
Public Class Unifiedorderservice {Private Static Logger = loggerFactory.getLogger (UnifiedOrderService.class); Object> Paramets = New TreeMap <Object, Object> (); ; .getOut_trade_no ()); ", Data.getopenid ()); parameters.put (" device_info ", d ata.getdevice_info ()); logger.info (" знак: "+wxsign.createsign (параметры, ключ)); f-8", новый Xmlfriendlymoder ("- _", "_"); XML); " + Returnxml);} catch (Exception e) {e.printstacktrace ();} return returnxml;}}}}}}}}}}}}}}}}}}}}}Wxsign
Общедоступный класс wxsign {private static Strickerencoding = "utf-8"; Parameters.EntrySet (); IT. {sb.append (k + "=" + v + "&");}} sb.append ("key =" + key); ); {Return string.valueof (system.currentttimemillis () / 1000);}}Последнее, что следует упомянуть, - это адрес обратного вызова notify_url для получения асинхронного обратного адреса уведомления WeChat.
Мы получили подготовку к приготовлению транзакции до платежей, чтобы мы могли выполнить последнюю операцию шага. Используйте H5, чтобы скорректировать API платежа.
// H5 Поверните платеж ATRT.Addattribute ("Appid", Redata.getAppid ()); ); ; "Appid", Redata.getAppid ()); ); ", wxsign.createSign (signmap, wxpayconfig.key));После передачи необходимых параметров на страницу используйте WeChat, чтобы предоставить метод для настройки оплаты.
<Script> function getUrlParam (name) {// Создание объекта регулярного выражения, содержащего целевые параметры var reg = new Regexp ("(^| &)" + name + "= ([^&]*) (& | $)) "); // Сопоставление целевого параметра var r = window.location.search.substr (1) .match (reg); // вернуть значение параметра if (r! = null) return unescape (r [2]); null;} function onbridgeady () {var appid = geturlparam ('appid'); 'Signtype'); TimeStamp, // "1395712654", // Timelia, второе количество секунд с 1970 года "не CESTR": noncestr, // "e61463f8efa94090b1f366cccfbbbb444", // случайная строка "Ge, // presay_id = u802345. ": Signtype, //" md5 ", // метод подписи WeChat:" PaySign ": PaySign, //" 70EA570631E4BB79628FBCA905343FFADD89 "" // WeChat Signature}, Funct Назад, команда WeChat торжественно напоминает: res.err_msg вернется в OK после того, как пользователь успешно оплатит, но это не гарантирует, что это абсолютно надежно. get_brand_wcpay_request: cancel ") {alert (" cancelation ");} if (res.err_msg ==" get_wcpay_request: Fail ") lert (" Ошибка платежа ");}});} funct == "недостаточно") {if (document.addeventristener) {document.addeventListener ('wei xinjsbridgeaready', onbridgeready, false);} else if (document .atachevent) {document.attachevent ('weixinjsbridgereidy', onbridgereidy); AttachEvent ('onweixinjsbridgegeady', OnbridgeDeady);}} else {onbridgeDeady ();}} </script>Вы можете настроить свою собственную страницу возврата, где вы возвращаете результат.
Резюме: Поскольку я также делаю это в первый раз, написание этой статьи - это записать результаты моей работы, и друзья, которые делятся с новичком, могут получить некоторую помощь прогресс
Выше всего содержимое развития Java Public Playment.