激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android實現微信支付的統一下單

Android實現微信支付的統一下單

2022-03-02 15:41Dr_abandon Android

這篇文章主要為大家詳細介紹了Android實現微信支付的統一下單,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android實現微信支付統一下單的具體代碼,供大家參考,具體內容如下

準備工作

申請微信開發者賬號,添加應用及申請開通微信支付功能,如
查看開通流程

統一下單的接口文檔:
查看接口

開發

①下載sdk:

sdk和demo下載

②可以導入包

在build.gradle文件中,添加如下依賴即可:

?
1
2
3
dependencies {
 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

?
1
2
3
dependencies {
 compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

③添加Android Manifest權限

?
1
2
3
4
5
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

調用統一下單接口

1.務必提交必須的字段:appid,body,mch_id,nonce_str,notify_url, out_trade_no,spbill_create_ip,total_fee,trade_type,sign(都是小寫);提交到微信接口時以xml格式提交

2.sign為前面提交的參數按照參數名ASCII碼從小到大排序簽名拼接起來然后進行MD5運算,再將得到的字符串所有字符轉換為大寫得到的,如簽名生成算法

3.參與生成sign的key為商戶賬號的密鑰,key設置路徑如下:微信商戶平臺(pay.weixin.qq.com)–>賬戶設置–>API安全–>密鑰設置

下面是具體代碼(如若查看你的sign生成及提交的xml是否正確可以點擊如下:簽名生成工具

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//拼接字段,順序不能變
    String A = "appid=你的appID" +
      "&body=jinshi" +
      "&mch_id=你的商戶號" +
      "&nonce_str=" + nonce_str +
      "&notify_url=http://www.szgsip.com/" +
      "&out_trade_no=" + trade_no +
      "&spbill_create_ip=192.168.1.1" +
      "&total_fee=1" +
      "&trade_type=APP";
    String key = "你的密鑰";
    String temp = A + "&key=" + key;
 // 生成sign
     String sign = MD5.getMessageDigest(temp.getBytes()).toUpperCase();

接下來提交到微信下單的接口上

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
private void httpThreadxml() {
 
 
  //組建xml數據
  //拼接字段,順序不能變
 
  xml.append("<xml>\n");
    xml.append("<appid>你的appID</appid>\n");
    xml.append("<body>jinshi</body>\n");
    xml.append("<mch_id>你的商戶號</mch_id>\n");
    xml.append("<nonce_str>" + nonce_str + "</nonce_str>\n");
    xml.append("<notify_url>http://www.szgsip.com/</notify_url>\n");
    xml.append("<out_trade_no>" + trade_no + "</out_trade_no>\n");
    xml.append("<spbill_create_ip>192.168.1.1</spbill_create_ip>\n");
    xml.append("<total_fee>1</total_fee>\n");
    xml.append("<trade_type>APP</trade_type>\n");
    xml.append("<sign>" + sign + "</sign>\n");
    xml.append("</xml>");
 
  try {
   final byte[] xmlbyte = xml.toString().getBytes("UTF-8");
 
   System.out.println(xml);
 
   URL url = new URL("https://api.mch.weixin.qq.com/pay/unifiedorder");
 
 
   final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setConnectTimeout(5000);
   conn.setDoOutput(true);// 允許輸出
   conn.setDoInput(true);
   conn.setUseCaches(false);// 不使用緩存
   conn.setRequestMethod("POST");
   conn.setRequestProperty("Connection", "Keep-Alive");// 維持長連接
   conn.setRequestProperty("Charset", "UTF-8");
   conn.setRequestProperty("Content-Length",
     String.valueOf(xmlbyte.length));
   conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
   conn.setRequestProperty("X-ClientType", "2");//發送自定義的頭信息
 
 
   conn.getOutputStream().write(xmlbyte);
   conn.getOutputStream().flush();
   conn.getOutputStream().close();
 
 
   if (conn.getResponseCode() != 200)
    throw new RuntimeException("請求url失敗");
 
   InputStream is = conn.getInputStream();// 獲取返回數據
 
 
   // 使用輸出流來輸出字符(可選)
   ByteArrayOutputStream out = new ByteArrayOutputStream();
   byte[] buf = new byte[1024];
   int len;
   while ((len = is.read(buf)) != -1) {
    out.write(buf, 0, len);
   }
   String string = out.toString("UTF-8");
   System.out.println(string);
 
   Log.e("  微信返回數據 ", " --- " + string);
   out.close();
 
 
  } catch (Exception e) {
 
   System.out.println(e);
  }
}

注意在調用上面的方法,一定要在子線程中進行

?
1
2
3
4
5
6
new Thread(new Runnable() {
    @Override
    public void run() {
     httpThreadxml();
   }
 }).start();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/Dr_abandon/article/details/80695156

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品一区二区视频在线观看 | 日产精品久久久一区二区福利 | 欧美精品成人一区二区三区四区 | 中文字幕h | bt 自拍 另类 综合 欧美 | 中文字幕在线观看成人 | 鲁人人人鲁人人鲁精品 | 精品国产一区二区久久 | 欧美伦交 | 国产精品一区二区三区99 | 成人富二代短视频 | 免费在线观看亚洲 | 一级成人欧美一区在线观看 | 亚洲视频精品在线 | 中文字幕在线观看网址 | 又黄又爽免费无遮挡在线观看 | 成人福利视频网站 | 史上最强炼体老祖动漫在线观看 | 国内精品久久久久影院不卡 | 91精品国产日韩91久久久久久360 | 国产成人视屏 | 国产免费一级 | 久久久成人精品视频 | 毛片在线看免费 | 精国产品一区二区三区四季综 | 羞羞视频2023 | 免费毛片在线 | 成人性视频在线 | 九九热免费精品视频 | 嗯哈~不行好大h双性 | 成年人免费黄色片 | 国产精品免费视频观看 | 99爱国产精品 | 欧美日韩国产一区二区三区在线观看 | 国产精品视频yy9299一区 | 二区视频 | 亚洲一区二区三区在线看 | 日本a∨精品中文字幕在线 欧美1—12sexvideos | 一级毛片免费观看 | 亚洲午夜精选 | 国产精品免费久久久 |