凯发娱发k8

android实现微信支付的统一下单 -凯发娱发k8

2023-06-15

本文实例为大家分享了android实现微信支付统一下单的具体代码,供大家参考,具体内容如下

准备工作

申请微信开发者账号,添加应用及申请开通微信支付功能,如
查看开通流程

统一下单的接口文档:
查看接口

开发

①下载sdk:

sdk和demo下载

②可以导入包

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

dependencies {
 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta: '
}

dependencies {
 compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta: '
}

③添加android manifest权限

 
 
 
 

调用统一下单接口

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是否正确可以点击如下:签名生成工具)

//拼接字段,顺序不能变
    string a = "appid=你的appid"  
      "&body=jinshi"  
      "&mch_id=你的商户号"  
      "&nonce_str="   nonce_str  
      "¬ify_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();

接下来提交到微信下单的接口上

 private void httpthreadxml() {
  //组建xml数据
  //拼接字段,顺序不能变
  xml.append("\n");
    xml.append("你的appid\n");
    xml.append("jinshi\n");
    xml.append("你的商户号\n");
    xml.append(""   nonce_str   "\n");
    xml.append("http://www.szgsip.com/\n");
    xml.append(""   trade_no   "\n");
    xml.append("192.168.1.1\n");
    xml.append("1\n");
    xml.append("app\n");
    xml.append(""   sign   "\n");
    xml.append("");
  try {
   final byte[] xmlbyte = xml.tostring().getbytes("utf-8");
   system.out.println(xml);
   url url = new ;
   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);
  }
}

注意在调用上面的方法,一定要在子线程中进行

new thread(new runnable() {
    @override
    public void run() {
     httpthreadxml();
   }
 }).start();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

网站地图