Android实现微信支付的统一下单

时间:2021-05-20

本文实例为大家分享了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权限

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

//拼接字段,顺序不能变 String A = "appid=你的appID" + "&body=jinshi" + "&mch_id=你的商户号" + "&nonce_str=" + nonce_str + "&notify_url=http:///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); }}

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

new Thread(new Runnable() { @Override public void run() { httpThreadxml(); } }).start();

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章