Я прочитал блог о платеже WeChat, который я написал в эти дни, и есть немало людей, читающих его. Я не знаю, потому что это потому, что блог недостаточно подробен или что происходит. Большинство из них просят у меня исходного кода. Я думаю, что программисты все еще должны иметь такой мыслительный процесс, поэтому они не дали исходного кода напрямую. Как говорится: «Лучше научить людей, как ловить рыбу, чем ловить рыбу». Поэтому я надеюсь потратить некоторое время, чтобы самостоятельно типизировать код, читая статью. Хорошо, давайте не будем говорить много чушь. На этот раз я поделюсь использованием интерфейса VeChat Cash Red Overvelope.
Ниже приводится введение в Cash Red Coventes от WeChat Development Documents:
Красные конверты - один из маркетинговых инструментов, предоставляемых торговой платформой WeChat. С момента его запуска их любили торговцы и пользователи. Торговцы могут распространять Cash Red конверты для пользователей платежей WeChat через эту платформу. После того, как пользователь получает Red Convelope, средства поступают в учетную запись пользователя WeChat Payment Payment, которая имеет тот же экспорт использования, что и другие средства в кошельке для монетов; Если пользователь не получает их, средства будут возвращены на платежный счет продавца через 24 часа.
Значение продукта
Пользователи всегда были предпочтительны пользователям WeChat Payment Cash Red Conventes из -за того, как они несут средства наличными. В последние годы Cash красные конверты сыграли важную роль; Они также принесли теплые ответы на маркетинговую деятельность торговцев в повседневных операциях. В целом, денежные конверты играют важную роль в сценариях, включая, помимо прочего:
Подводя итог, что валовые конверты Vechat Cash - это маркетинговый инструмент, который может увеличить липкость пользователей, следуя официальным учетным записям, регистрации и т. Д. На этот раз я сосредоточен на том, чтобы поделиться своим опытом с точки зрения разработки программы
1. Условия, необходимые для использования функции конверта WeChat Cash Red
1. Иметь торговую платформу и полные секретные сертификаты WeChat
2. Торговцы должны иметь достаточно баланса для использования (если недостаточно, вы можете использовать Tenpay для перезарядки с торговой платформы)
3. Лучший фонд развития для оплаты WeChat
Ключевые моменты и трудности второго развития
1 алгоритм подписи WeChat
2 httppclient и использование сертификатов
3 Чтение документов WeChat (https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)
Если у вас есть оплата WeChat H5 или сканировать QR -код для оплаты, вы можете прочитать эту часть документа, который представляет собой кусок торта. Это легко понять. В то же время, пока вы освоите знание HttpClient, все будет готово.
Три прямого кода
public static void sendredpack (string mch_billno, string openid, string send_name, string otal_fee, string otal_num, string wilding, string act_name, string ampe, string ip), бросает исключение {string non = paycommonutil.createncestr (); SortedMap <объект, объект> p = new TreeMap <Object, Object> (); p.put ("nonce_str", non); p.put ("mch_billno", mch_billno); p.put ("mch_id", configutil.mch_id); p.put ("wxappid", configutil.appid); p.put ("re_openid", openid); p.put ("total_amount", total_fee); p.put ("total_num", "1"); p.put ("client_ip", "127.0.0.1"); p.put ("act_name", act_name); p.put ("send_name", send_name); P.Put («желание», желание); P.Put («замечание», замечание); String sign = paycommonutil.createSign ("utf-8", p); System.out.println (знак); P.Put («знак», знак); String reuqestxml = paycommonutil.getRequestxml (p); Store Store Store = KeyStore.getInstance ("PKCS12"); FileInputStream inStream = new FileInputStream (новый файл (configutil.cert_path)); try {keystore.load (instream, configutil.mch_id.tochararray ()); } наконец {enterstream.close (); } SslContext sslContext = sslContexts.custom (). SslConnectionsockeCtectory sslsf = new sslConnectionsockectectory (sslContext, new String [] {"tlsv1"}, null, sslConnectionsockeCtectory.browser_compatible_hostname_verifier); ClosableHttpClient httpclient = httpclients.custom () .setsslsocketfactory (sslsf) .build (); try {httppost httppost = new httppost ("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); // refund httppost.addheader ("content-type", "Application/x-www-urlencoded; System.out.println («выполнение запроса» + httppost.getRequestline ()); // Запрашиваемый XML должен быть транскодирован в кодирование ISO8859-1, в противном случае он подвержен ошибкам подписи или тексту на красном отображении ошибок. // установить тип httppost.setentity (requentity); ClosableHttpresponse response = httpclient.execute (httppost); try {httpentity entity = response.getentity (); System.out.println ("-----------------------------------------"); System.out.println (response.getStatusline ()); if (Entity! = null) {System.out.println ("Длина содержимого ответа:" + entity.getContentLength ()); BufferedReader BufferedReader = new BufferedReader (New InputStreamReader (entity.getContent (), "UTF-8")); Строка текст; while ((text = bufferedreader.readline ())! = null) {System.out.println (text); }} Entityutils.consume (entity); } наконец {response.close (); }} наконец {httpclient.close (); }} Следующие моменты следует отметить:
// Запрашиваемый XML должен быть транскодирован в кодирование ISO8859-1, в противном случае он склонен подписывать ошибки или текстовый дисплей на красной конверте, является неправильным.
Strongity reqentity = new строгость (new String (reuqestxml.getbytes (), "iso8859-1"));
Можно сказать, что это место почти разбило меня и попробовал различную отладку. Было бы нормально добавить его с помощью Это может быть связано с разницей между HTTPClient и нативным HTTPSConnection в передаче данных. Здесь не проведено много исследований.
Называть этот метод проще, как и следующее
public static void main (string args []) {try {sendredpack ("12828839012016101420", "OpenID получателя", "XXX", "100", "1", «Поздравляем с разболтанием каждый год», «Новый год Red Envelope», «Новый год Red Envelope не Grabing». } catch (Exception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} Информация, напечатанная после отправки красного конверта, выглядит следующим образом:
TTP/1.1 200 OK Длина Содержания ответа: 567 <xml> <return_code> <! [CDATA [Success]]]> </err_code> <err_code_des> <! [Cdata [успех]]> </err_code> <err_code_des> <! <MCH_BILLNO> <! [CDATA [12828839012016101421]]> </mch_billno> <mch_id> <! [CDATA [12828883901]]> </mch_id> <wxappid> <! [cdata [xxxx]]> <Re_openid> <! [CDATA [xxxx]]]> </re_openid> <total_amount> 100 </otal_amount> <send_listid> <! [CDATA [1000041701201610143000090813093]]> </send_listid> </xml>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.