本文实例为大家分享了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(" "); 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); } }你的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("
注意在调用上面的方法,一定要在子线程中进行
new thread(new runnable() { @override public void run() { httpthreadxml(); } }).start();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。