(原创)微信支付SDK调用的核心代码与分析(基于Android)

先上代码,后面会分析

String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
Button payBtn = (Button) findViewById(R.id.appay_btn);
payBtn.setEnabled(false);
Toast.makeText(PayActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show();
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") ){
PayReq 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
Toast.makeText(PayActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
}else{
Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
Toast.makeText(PayActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
}
}else{
Log.d("PAY_GET", "服务器请求错误");
Toast.makeText(PayActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show();
}
}catch(Exception e){
Log.e("PAY_GET", "异常:"+e.getMessage());
Toast.makeText(PayActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
}
payBtn.setEnabled(true);

其核心action为:

byte[] buf = Util.httpGet(url);httpGet方法的代码如下:
public static byte[] httpGet(final String url) {
        if (url == null || url.length() == 0) {
            Log.e(TAG, "httpGet, url is null");
            return null;
        }

        HttpClient httpClient = getNewHttpClient();
        HttpGet httpGet = new HttpGet(url);

        try {
            HttpResponse resp = httpClient.execute(httpGet);
            if (resp.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                Log.e(TAG, "httpGet fail, status code = " + resp.getStatusLine().getStatusCode());
                return null;
            }

            return EntityUtils.toByteArray(resp.getEntity());

        } catch (Exception e) {
            Log.e(TAG, "httpGet exception, e = " + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }

这里本质上是一个http的get请求,返回json格式的字符串.

在发出的请求中会将订单和app的信息传给服务器.并调用手机中的微信app

支付完成后,会从服务器拿到支付返回结果.

腾讯是保证分布式事务的一致性的,根据返回结果代码就可以知道支付效果.

时间: 2024-10-09 20:12:47

(原创)微信支付SDK调用的核心代码与分析(基于Android)的相关文章

iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修改就先要跑起来啊. 根据错误提示,判断是libwechatsdk.a里面没有这个方法.顺藤摸瓜按照下面的步骤开始了解决旅途. 阶段一 1. 手动添加了微信支付SDK源码到工程 2. pod 'UMengUShare/Social/WeChat'添加了微信分享, 编译时报错如下: 说明导入的微信支付S

开源微信支付SDK

应该有一年多没在博客园上写文章了,毕竟是一个记录自己技术成长的平台,没能将写博客长期坚持下来,说起来也是挺惭愧的.对于自己的近况而言,确实平常加班也比较多,时间会比较压缩,所以到后来博客也基本停止了更新. 现在自己会更多地会专注于做php这一块,因为公司决定转向切换技术平台,所以我也一起拥抱了变化.其实我刚开始也犹豫过,觉得转技术方向会比较折腾,容易陷入学得杂而浅的境地.不过在经历了这段技术转型的日子,我逐渐地打消了这个想法,因为在做php的这段时间内,确实让我开阔了视野(开源社区的力量确实很强

微信支付SDK开发教程

今天研究了一下微信的SDK开发教程,下面我就简单的把步骤介绍下,希望对你们有所帮助 现在的支付都是使用V3接口的,2014年9月之前都是使用V2接口,现在我就介绍下V2和V3接口的申请方法吧 一.微信支付v2 1. 使用网页授权接口 使用网页授权接口获取用户的基本信息. [微信公众号]OAuth2.0授权.pdf点击下载 2. 使用共享收货地址控件 使用共享收货地址控件,获取用户在微信的收货地址.[微信公众号支付]收货地址共享接口文档V1.6.pdf点击下载 3. 使用公众号发起支付请求 使用J

微信支付SDK存在XXE漏洞

微信支付SDK存在XXE漏洞 漏洞信息来源:http://seclists.org/fulldisclosure/2018/Jul/3https://xz.aliyun.com/t/2426 0x00受影响版本: JAVA SDK,WxPayAPI_JAVA_v3,建议使用了该版本的公司进行异常支付排查.微信在JAVA版本的SDK中提供callback回调功能,用来帮助商家接收异步付款结果,该接口接受XML格式的数据,×××者可以构造恶意的回调数据(XML格式)来窃取商家服务器上的任何信息.一旦

微信支付SDK(python版)

最近一段时间一直在搞微信平台开发,最近的v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为 python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo 照葫芦画瓢就可以了. 我已经把代码放到github了,https://github.com/Skycrab/wzhifuSDK,我主要测试了JsApi调用方式,其它的调用方式并没有测试,如果你发现了bug,请多多pull request,我将不甚感激. 方便观看,代码贴于此.

Android微信支付SDK开发

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的- 3.AndroidMainfest文件修改 权限 <uses-permission

Android微信支付SDK开发笔记

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的… 3.AndroidMainfest文件修改 权限声明: <uses-permiss

IOS更换64位支付宝 微信支付 SDK

14年的时候苹果就下发通知:新的上线项目必须适配64-bit,更新的项目在2015年的六月一号以后也必须适配64-bit刚开始的时候没注意到这个问题,当打包完自己项目的时候,居然在适配64-bit的时候出现了一个警告, 看了一下,大概的意思也就是说,我的项目没有适配64-bit,我勒个去,上个版本还没有提示这个,这个版本居然冒出这个警告了.眼看着六月一号也即将到来,十天时间,以苹果的审核进度不一定过的了,万一中间再出个小插曲,估计上线得一个月了,加速审核苹果不一定买帐.迟早要做64bit的适配的

pringboot整合微信支付sdk

之前做的几个微信小程序项目,大部分客户都有要在微信小程序前端提现的需求.提现功能的实现,自然使用企业付款接口,不过这个功能开通比较麻烦,要满足3个条件.; 之前实现过几个微信支付的接口,不过都是自己码的代码,从网上找找拼凑,觉得看起来不舒服~_~ 于是乎找到了微信官方提供的支付sdk.这里用的是java版本,springboot整合java 下载sdk,引入项目 这里可以直接下载官方提供的sdk,然后将几个java类拷贝到你的项目,也可以直接引入maven依赖,这里是直接将Java类拷贝到我项目