Чтобы использовать JSAPI для выплаты WeChat, вы должны сначала получить PREPAY_ID от WeChat, а затем заполнить платеж, позвонив в WeChat JSAPI. Из -за сложного интерактивного взаимодействия Front -end, GET_BRAND_WCPAY_REQUEST: CANCEL или GET_BRAND_WCPAY_REQUEST: Неудача может быть равномерно обрабатываться для пользователей, чтобы столкнуться с ошибками или активно сдаваться, без необходимости уточнить различие.
Пример кода заключается в следующем:
Функция Onbridgeready () {weixinjsbridge.invoke ('getBrandwcpayrequest', {"appid": "wx2421b1c4370ec43b", // Имя общедоступной учетной записи было передано в "TimeStam数 «Не CESTR»: «E61463F8EFA94090B1F366CCCFBBB444», // 随机串 «Пакет»: «U802345JGFJSDFGSDG888», «Signtype»: «MD5», // 微信签名方式: "PAYSIN 4c63ff7fadd89 "// 微信签名}, функция ( res) {if (res.err_msg == "get_brand_wcpay_request: ok") {} // Использовать приведенный выше метод для определения возврата фронта, команда WeChat Team: Res.err_msg вернется в OK после успешного платежа пользователя, но это не гарантирует это. );
Приведенные выше параметры пакета параметров являются prepaay_id
Ниже приведено о получении параметров для вызова JSAPI
Когда мы называем JSAPI, мы должны получить OpenID пользователя.
Сначала определите объект запроса:
Пакет Com.Unstopped.protocol; Import Java.map; STRING_START; = builder.mch_id; .out_trade_no; builder.goods_tag ; ify_url; void setAppid (string appid) = appid;} public void setmch_id (string mch_id) {this .mch_id = mch_id;} public void setDevice_info (string device_info) {this.device_info = device_info;} public setnonononononononononononce_stry r) r. nonce_str;} public void setSign (String Знак) {this.sign = sign; ch (string attach) {this.attach = atture;} public void setout_trade_no (string out_trade_no) {this.out_trade_no = out_trade_no;} public void setfee_type (string fee_type) {this.fee_type = feo_type; ) {This.total_fee = Total_fee;} Public void Setspbill_Create_ip (String SPBILL_CREATE_IP) {This .spbill_create_ip = spban_create_ip;} Public void settime_start (string time_start) {this.time_start = time_start; String time_expire) {this.time_expire = time_expire;} public void setgoods_tags (string goods_tag) {this.goods_tags_tag; } PUBLIC VOID SETNOTIFY_URL (String Notify_url) {this.notify_url = notify_url;} Public void Settrade_Type (String Trade_type) {This.tr Ade_type = Trade_type;} Public Void SetProduct_id (String Product_id) {this.product_id = product_id;} public void setlimit_pay (string limit_pay) {this.limit_pay = limet_pay;} public void setopenid (string opend) {this.openid = opend;} public map <string, object> ap () {map <string, map = new Hashmap <String, Object> (); .get (this); ();} Возвращать карту; Private Spbill_create_ip; Передача параметра Appid не может быть null ");} if (mch_id == null) {thress newalargumentException (" "numbers of mch_id не может быть нулевым");} if (body == nul не может быть null ");} if (out_trade_no == null) {throw newalargumentException numbers out_trade_no не может быть null");} if (total_fee == nul == null) {throw newalargumentException («количество параметров spbill_create_ip не может быть null»);} if (notify_url == null) {throw new allosalargumentedExcept ) de_type не может быть null ");} this.appid = appid; this .mch_id = mch_id; this.body = body; this.out_trade_no = out_trade_no; this.total_fee = topal_fee; = trade_type;} public unifyReqdatabuilder setdevice_info) {{this.device_info = device_info; Прикрепить; = Time_expire; imit_pay = Limit_pay ; Нелегалагментированная экзенция («Когда Trade_type IS JSAPI, OpenID -это обязательный параметр»);} if ("native" .equals (this.trade_type) && product_id == nul Обязательно -FILL PARAMETER ");} вернуть новый UnifiedOrderReqData (this);}}}}
Поскольку требуются некоторые параметры, выбираются некоторые параметры. И знак должен ждать, чтобы все параметры проходили перед расчетом, поэтому режим застройщика используется здесь. О режиме строителя.
Мы выбираем httpclient для передачи сети.
Пакет Com.Unstopped.com; Log; .Apache.http.client.config.requestconfig; .conn.connectionpooltimeoutexception; http.client.httpclients; Java.security.keystore; Время подключения времени, по умолчанию 10 секунд. KeyStore = KeyStore.getInstance ("PKCS12"); Sslcontexts.custom () .loadkeymaterial (keystore, configure.getcertpassword (). Tocharray (). Ild (); // разрешить протокол tlsv1 только sslconnectionsockectectectactory sslsf = new sslconnectionsotfactory (sslcontext, new String [] {"tlsv1", null, nul Sslconnectionsotfactory.browser_compatible_hostname_verifier); f) .build (); {Throw New Runtimee Xception ("Ошибка создания httpclient ...", e);}} public Static String Doget (String RequestUrl). getrequestline ()); GetStatuscode (); Статус: " + status);}}}; return httpclient.execute (httpget, responsehandler);} наконец {httpget.releaseconnection ();}} public Stric vopost (string url, object2xml) {string = null; ost; = New httppost (url); Отправлено в API преобразуется в данные формата XML в API PostDataxml = XstreamForRequestPostdata .toxml (Object2xml); -8, в противном случае китайцы на сервере API не могут быть успешно идентифицированы. ;/ Установить конфигурацию logger.info устройства запроса («Выполнение запроса» + httppost.getrequestline ()); Entity, "utf-8");} catch (connectionpooltimeoutexception e) {logger.error ("http get throw connectionpooltimeoutexcept ", e);} catch) {logger.error (" "http get throw sockettimeoutexception", e);} catch (exception e) {logger.error ("http get throw), e);} наконец {httppp ost. abort ();} return Result;
Тогда есть наш общий вход:
Пакет Com.Unstopped.service; .parserconfigurationException; Бросает ioException, saxexception, parserconfigutexception {string res) onfigure.unified_order_api, reqdata); " , "MCH_ID", "out_trade_no", 1, "spaby_create_ip_ip_ip", notify_url "," jsapi "). setopenid (" openid "). build (); System.out.println (UnifiedOrder (reqData);}};
Возвращен XML:
<mml> <sturn_code> <! CDATA [10000100]]> </mch_id> <nonce_str> <! [cdata [IITRI8IABBBLZ1JC]]> </nonce_str> <! [7921e432F6555F0E86D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D76D7D7D7D76D7D7D7D7D7D7D76D7D7D7D76D7D7D7D76D7D7E86D7D7ED75E8E8ED0CE6 2F]]> </sign> < result_code> <! [cdata [Success]]> </Result_code> <pread_id> <!
Return_code и result_code вернет prepay_id, когда они будут успешными. Сущность Сущность , Затем используйте его в JSAPI. Сущность
Эта статья была организована для «Сводка по разработке JavaScript WeChat», «Резюме для разработки Android WeChat» и «Резюме по разработке Java WeChat Development», приветствуйте всех, кто учится и читает.
Я рекомендую учебник WeChat Mini с более высокой степенью внимания к всем: редактор «Учебник по разработке программы WeChat» тщательно организован для всех.
Выше всего содержимое этой статьи.