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

本文实例为大家分享了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://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("<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);
  }
}

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

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

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

(0)

相关推荐

  • 微信支付仅能成功调用一次问题的解决方法(Android)

    本人使用Android开发有一段时间了,但是本身没有系统学,而且多年专注服务端开发,总觉得因为项目需要接触Android移动端开发只是暂时的,所以没有太上心,结果碰到一个大难题折腾了一天,最后被有经验的小伙伴提示了一下才迎刃而解,感觉无地自容的同时,又非常窃喜,毕竟跨过一个一个的坎,就成长了,在这里丢人等换个地方就成牛了也未可知,哈哈.闲言就絮叨到这里,赶紧分享: 微信支付调用接口整体的流程有必要简述一下(目前网上的资料大部分都是适配微信支付旧版的代码,最新的微信支付官方文档中并没有服务端的De

  • android仿微信支付宝的支付密码输入框示例

    大家好,我是狸小华,萌汉子一枚.今天给大家带来的是仿微信/支付宝的密码输入框.这个效果也出来有一段时间了,所以搜索一下还是有不少的网友实现,但是,但是!经过一番查看后,我发现他们的实现分为两大类. 一,直接继承EditText,然后在ondraw里面做文章:二,EditText外面包一个viewGroup.我不喜欢这两种实现方式,觉着有些臃肿了,所以我详细介绍下我的实现方式:直接继承View,获取用户的输入,然后draw出来. 我们实现的是上面的密码输入框,这个键盘...系统自带的哦,调用用户输

  • Android微信支付获取二次签名Sign的方法

    本文实例为大家分享了Android微信支付获取二次签名Sign的方法,供大家参考,具体内容如下 /** * 获取sign签名 * * @return */ private String genPayReq() { // 获取参数的值 PayReq request = new PayReq(); request.appId = ConstantsMember.APP_ID; request.partnerId = ConstantsMember.MCHID; request.prepayId =

  • 新版Android studio导入微信支付和支付宝官方Demo问题解决大全

    最近项目要用到支付宝支付和微信支付,本想使用第三方支付框架ping++或者BeeCloud的,但是由于他们的收费问题,让我望而却步,而且公司给了相应的公钥.私钥和APPID等,所以就用下开放平台的呗. 进去倒腾了半天才发现一堆问题,Oh,我的天.完全不知所云,百度谷歌了一堆,都没找到足够的解决方案.好吧,自己来,这里也就把相关的东西分享给大家,如果有类似问题的可以考虑使用一下,不足的地方大牛就别喷了. 微信开放平台有文档和SDK,大家可以去自己查看下载,火箭:https://open.weixi

  • Android第三方微信支付教程

    做了微信支付,下载了Demo,发现和之前有所改动,v3.0的版本,也许有的朋友还在摸索,这里我已经成功支付,话不多说,直接进入主题: 一.首先要在微信开发平台注册账号,新增应用,填写正确的包名,正确的签名(MD5中的一串字符冒号去掉,全部小写),当然也会生成的AppID和AppSecret都有用!最后还要花300大洋开通支付功能! 二.分析一下微信支付的流程 三.界面交互流程 上面都看明白了,接下来就是写代码了 四.这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这

  • Android编程实现的微信支付功能详解【附Demo源码下载】

    本文实例讲述了Android编程实现的微信支付功能.分享给大家供大家参考,具体如下: 最近公司弄Ionic框架,项目中需要微信支付,无奈,把我调过去弄,期间也是几近崩溃,好在皇天不负有心人,在看别人的文档,终于是在项目中集成了微信支付,下面作为一个小白的我,想要把我的经验分享给大家,希望对大家有所帮助. 先给一个可用的demo吧(运行前先看txt文件) demo代码点击此处本站下载. 这个demo是基于eclipse开发的,博主也在Android Studio开发过微信支付,原理都是一样的,大家

  • Android实现微信支付功能

    开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单.第二步生成微信支付参数.第三步调起微信APP支付.除了需要审核通过的APP应用外,还需要获得微信支付接口权限,然后获取对应的商户号.API密钥,这两者缺一不可,并且在APP微信支付中使用 获得商户号.API密钥 在微信开放平台中查看审核通过的APP应用,是否申请支付功能,若已申请,登录微信支付|商户平台:http://pay.weixin.qq.com 查看对应的商户号.API密钥 >申请微信支付接口 >登录商户平

  • Android 高仿微信支付数字键盘功能

    现在很多app的支付.输入密码功能,都已经开始使用自定义数字键盘,不仅更加方便.其效果着实精致. 下面带着大家学习下,如何高仿微信的数字键盘,可以拿来直接用在自身的项目中. 先看下效果图: 1. 自定义布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • Android支付宝和微信支付集成

    场景 随着移动支付的兴起,在我们的app'中,会经常有集成支付的需求.这时候一般都会采用微信和支付宝的sdk 来集成 (一)支付宝支付 在使用支付宝支付的过程中,我们是在服务器端生成订单,客户端访问接口,并得到订单信息,调用接口支付,支付成功后支付宝会分别 异步调用服务器端,并向客户端返回支付结果. 开发步骤: ①注册支付宝账号--进行实名认证--提交审核资料--审核通过 支付宝无线快捷支付接口: b.alipay.com/order/productDetail.htm?productId=20

  • Android微信支付开发问题

    并不是所有的BAT的API都是非常好用的,微信支付就有不少的缺陷,总结一下微信支付实现中出现的问题   坑点一: PayReq的参数 sign的生成   PayReq对象有个参数为packageValue 而sign生成时要用到packageValue,但是对应的Key是package,这里的key容易弄错 复制代码 代码如下: List<NameValuePair> signParams = new LinkedList<NameValuePair>();         sig

随机推荐