美文网首页首页投稿Android进阶+实战Android开发
Android接入微信支付完全解析,太全了~

Android接入微信支付完全解析,太全了~

作者: SmileUsers | 来源:发表于2016-04-14 19:49 被阅读29609次

今天来聊聊,android中接入微信支付的需求,肯定有人会说,这多简单呀,还在这里扯什么,赶快去洗洗睡吧~~

那我就不服了,要是说这简单的,你知道微信支付官网多少吗,要是你一百度,下面全是广告,哈哈,你一不小心就掉坑去了,在简单的事,只要你想把他做好,其实也是很复杂的~

简介

首先我们来到微信支付官网瞅瞅:

Paste_Image.png

可以看到这就是微信支付首页,下面有几种支付方式,而我们今天的主角就是APP支付,我们可以直接点进去,或者从左上角接入指引-APP支付,进去的文档式样的,这是这个文档的位置如下图所示:

Paste_Image.png

肯定有人说,你贴这么有毛用呀,还浪费我流量...

别急让我给你说说这图有什么用,首先从这图你能看出从注册开发平台账号到完成支付接入需要哪些步骤,哪些资料,这样你可以让相关的人员事先去准备这些资料,而不是填完一步资料,在去找下一步资料,记住时间就是金钱,另外你领导说来给我讲讲微信支付那准备哪些资料,你没看过这文档,那我就只能呵呵了O(∩_∩)O。另外哪些说支付简单的,有几个知道这张图,又有谁认真看过~

可以看到是要加300块的,还需要企业的一些资料。

另外微信支付有两个平台分别是开发者平台商户平台

开发者平台:主要是针对开发者,比如:创建应用,获取appid
商户平台:主要是商户上面的一些管理,比如:可以查看流水,订单呀

创建应用

这里我只是演示怎么创建应用,最后不会用这个账号的,因为我这是个人账号,没法申请支付,只是给不会创建的朋友做一个演示,需要哪些资料而已,会的可略过~

首先我们来到开发者平台,没有账号的先注册,这个我想不用演示了,直接演示怎么创建应用,首先你的登录完账号,点击管理中心-移动应用:

Paste_Image.png

点击左上角的创建移动应用,到如下界面,因为这里是测试,所有资料都是随便填啦

Paste_Image.png

点击下一步就来到了

Paste_Image.png

这一步让你填写,需要的平台,以及平台信息,我这里只悬着android,填入包名和签名,另外这里他没有想微博那样可以填入多个签名,那么这里我建议你一开始填入debug的签名,等调试通过了在填写正式签名,签名的获取方法和接入第三方登录是一样的。最后提交审核,等审核完以后,我们点击到应用详情,应该是这样的效果

Paste_Image.png

个人账号创建的应用审核通过后只有,分享功能,如果还需要支付,可以点击申请,然后认证账号并上传一些资料,这又是一个漫长的过程,这里我们就不了那么多了,现在直接说怎么在代码实现吧

运行官方demo

记住这里的支付demo是在商户平台的帮助里面下载,地址在这里,而不是开发者平台下载的那个demo(以前是可以,现在这里下载的demo,里面剔除了支付),如下图,是这个页面:

Paste_Image.png

第一个是基础库,点击后会跳到开发者平台,第二个参数支付demo,当然里面也包含了分享等一些功能,可以说如果你既要做支付又要做分享,那么你只需要这个一个demo就行了,当然还得需要我这篇文章呀

下载完导入eclipse,替换debug.keystore然后运行,就可以看到如下界面,终于看到支付了,激动不已是不是

Paste_Image.png

然后我们就可以点击“跳转到支付界面”,看看什么效果呀,是骡子是马总的溜溜吧,看到这一面,感觉神清气爽,因为demo跑通了,呵呵~

Paste_Image.png

demo也看了,钱也付了,那我们现在就该开始接入支付了

正式接入支付

首先还是得上一张流程图呀,不然你知道怎么个逻辑?

这是这个文档的官方地址

,这是官方的解释

商户系统和微信支付系统主要交互说明:

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】

步骤5:商户后台接收支付通知。api参见【支付结果通知API】

步骤6:商户后台查询支付结果。,api参见【查询订单API】

首要微信支付暴露给我的是两步,一步是生成预支付订单,然后那个预支付订单id再去调用微信支付,所以说这里就有两种实现方式了,一种是客户端处理这所有步骤,另外一种肯定是服务端创建与支付订单和签名,然后返回给我们,我们才拿着这些参数去调用微信支付。实际应用中,推荐使用服务那种,但是我这里讲的是本地怎么实现支付,如果你们是在服务端支付,那么你的告诉他你需要什么参数,他怎么创建预支付订单等服务端下单参考这里

配置

这是官方的app支付开发步骤,另外这里由于我没有可用的支付所以,写demo我用的包名和key都是微信demo的

配置权限

配置activity

<uses-permission android:name="android.permission.INTERNET"/>

配置回调activity

<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

调用支付

public void testWxPay(View view) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
            ToastUtil.shortToastInBackgroundThread(getActivity(), "获取订单中...");
            try {
                byte[] buf = Util.httpGet(url);
                if (buf != null && buf.length > 0) {
                    String content = new String(buf);
                    Log.e("get server pay params:", content);
                    JSONObject json = new JSONObject(content);
                    if (null != json && !json.has("retcode")) {
                        req = new PayReq();
                        //req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
                        req.appId = json.getString("appid");
                        req.partnerId = json.getString("partnerid");
                        req.prepayId = json.getString("prepayid");
                        req.nonceStr = json.getString("noncestr");
                        req.timeStamp = json.getString("timestamp");
                        req.packageValue = json.getString("package");
                        req.sign = json.getString("sign");
                        req.extData = "app data"; // optional
                        ToastUtil.shortToastInBackgroundThread(getActivity(), "正常调起支付");
                        toPay();
                    } else {
                        Log.d("PAY_GET", "返回错误" + json.getString("retmsg"));
                        ToastUtil.shortToastInBackgroundThread(getActivity(), "返回错误" + json.getString("retmsg"));
                    }
                } else {
                    Log.d("PAY_GET", "服务器请求错误");
                    ToastUtil.shortToastInBackgroundThread(getActivity(), "服务器请求错误");
                }
            } catch (Exception e) {
                Log.e("PAY_GET", "异常:" + e.getMessage());
                ToastUtil.shortToastInBackgroundThread(getActivity(), "异常:" + e.getMessage());
            }
        }
    }).start();

}

private void toPay() {
    // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
    api.sendReq(req);
}

到这里如果你按照我的配置的话,正常情况下试可用调起支付界面了,如果出现-1,请检查是不是替换了debug.keystore,如果替换了,还是这样记得清空微信缓存

以上测试代码都在github上,官方的下载的sdk包也在该仓库的docs目录下

如果我的文章对来带来的帮助,可加我微信,微博,QQ什么啥的交个朋友也是不错的,另外微信,微博都会不定期发一些优质的文章,感谢大家的支持~~,联系方式在我的个人介绍里啦

相关文章

  • Android接入微信支付完全解析,太全了~

    今天来聊聊,android中接入微信支付的需求,肯定有人会说,这多简单呀,还在这里扯什么,赶快去洗洗睡吧~~ 那我...

  • android 微信 支付 接入流程总结

    [TOC] 客户端微信支付 android 接入微信指南android 资源下载页微信支付 开发文档 登录微信官方...

  • Android接入微信支付

    1、先在微信开放平台申请开发应用,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平...

  • Android 接入微信支付

    前言: 参考地址(做的时候有参考了以下两个博客的内容,自己按照实际情况,简化了些东西): https://gith...

  • Android接入微信支付

    集成 1.在项目的 build.gradle中,添加下面的内容 2.包名目录下创建wxapi文件夹,此包(wxap...

  • Android接入微信支付

    公司要求开通微信支付功能,在此记录一下实现步骤。 一:准备工作 1.首先需要在微信开放平台注册账号。微信开放平台 ...

  • android接入微信支付

    1.首先导入微信支付依赖 2.依赖导入以后在包后面创建 wxapi 包 (注意:wxapi包一定要放在根目录下面)...

  • android接入微信支付

    1.首先导入微信支付依赖 2.依赖导入以后在包后面创建 wxapi 包 (注意:wxapi包一定要放在根目录下面)...

  • Android属性动画完全解析

    Android属性动画完全解析(上)Android属性动画完全解析(中)Android属性动画完全解析(下)

  • iOS开发集成第三方微信支付和分享问题(20170103更新)

    有关Android方向的请绕道Android开发第三方APP接入微信支付 前言 笨笨在本文使用的是微信SDK1.7...

网友评论

  • hewenle:必须得支持下博主,刚需,赞!!!
  • 40f614d9bb95:没有什么参考价值
    thaixp:键盘打字容易,别人码字不容易,你说没什么参考价值,那你就去看其他的文章,没必要打字说明,你也可以自己写一篇你自己觉得有意义的文章出来,尊重下别人的劳动成果。
  • 蓝库知识:您好,我想问一下,您遇到过从后台进入,不会回调 回调页的情况吗
  • 26beff9e5d9e:对于小白来说,非常实用。
  • 差不多先生呵呵哒:楼主有遇到这种情况吗?有的手机可以使用微信分身(oppoR9s),发起微信支付后,会弹出选择要支付的微信,如果这个时候点击取消了,是收不到微信的支付失败的回调的,可以实现在点击取消后获得一个取消支付的回调吗?或者解决的思路也行...谢谢
  • hexiaosa:正在申请微信支付,APP截图就是通不过,让上传应用商店下载链接,求解
  • 1bc5d6a48720:收一个微信支付t0号,有的联系wechat: streestyle
  • 9df2a6e99159:简直了,跟没说没什么区别
  • Devid:没有说明服务端 开发,仅仅客户端是完不成的
  • 8a9b333eb182:每个手机运行demo 第一次可以走到支付成功,之后都是返回-1
  • Dora_Liang:为什么我运行官方demo,调到支付界面,发起支付,报服务器异常?
    0841905d3f0e:@谈恋爱的小猴子 我找到那个demo了。我也是报服务器异常,你解决了么?
    Dora_Liang:@深夜诗人_fcb9 你的那个demo是最新的,它剔除了
    0841905d3f0e:为什么网找到的官方demo没有支付这个界面?
  • Javen205:建议是把获取预付订单接口放到服务器端去实现 我这里封装了一个微信、支付宝App支付 http://www.jianshu.com/p/a4caad3307f7
  • 11120de063f4:我的官方demo支付为什么宝服务器请求错误啊
    40b8d9d4c575:你那解决了吗?
    40b8d9d4c575:@阿杏_1181 你那解决了吗?
    阿杏_1181:可能是请求(耗时操作)写在主线程了,楼主的开了个子线程
  • 小千聊安卓:请求之后的回调呢? 你没写
  • bf676a4aae7f:替换debug.keystore,是替换成官方Demo中带的那个debug.keystore吗?我这运行只有第一次成功了,后来的都显示-1,这是怎么回事?
    Javen205:@yl幻化成风 这个问题一般是签名包不对
    哎丿你是猪吗: yl幻化成风 你解决了吗? 我的也是这个问题,请教一下!
  • MambasJi:我觉得很好啊,对于没接触过的人来说,省了很多麻烦 :+1:
  • Champion是冠军:没什么分享价值啊

本文标题:Android接入微信支付完全解析,太全了~

本文链接:https://www.haomeiwen.com/subject/xbvglttx.html