`

微信支付接口 For Android 上手指南

 
阅读更多

SDK 的接口和使用请参见微信开放平台上的上手指南( Android) 1和 SDK Sample2。这里主要说
明在正常使用微信 SDK 的第三方 app 上使用微信支付接口的步骤。
准备工作:
在使用接口之前请先保证持有向微信开放平台申请得到的 appid、 appsecret(长度为
32 的字符串,用于获取 access_token)、 appkey(长度为 128 的字符串,用于支付过程中生
成 app_signature)及 partnerkey(微信公众平台商户模块生成的商户密钥) 。
注意: appsecret、 appkey、 partnerkey 不应硬编码到客户端程序中,建议需要用到这
三个字段的过程都在服务器端完成。
一、 获取 access_token
access_token 是 APP 的全局唯一票据, APP 调用各接口时都需使用 access_token。正
常情况下 access_token 有效期为 7200 秒,重复获取将导致上次获取的 access_token 失
效。
APP 可以使用 AppID 和 AppSecret 调用本接口来获取 access_token。 AppID 和 AppSecret
可在开放平台后台获得。注意调用接口时需使用 https 协议。
接口调用请求说明
http 请求方式: GET
https://api.weixin.qq.com/cgibin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明:
参数 是否必须 说明
grant_type 是 获取 access_toke,此处填写 client_credential
appid 是 APP 唯一凭证
secret 是 应用密钥,在微信开放平台提交应用审核通过后获得
返回说明
正常情况下,微信会返回下述 JSON 数据包给开发者:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
参数 说明
1 http://open.weixin.qq.com/document/gettingstart/android/?lang=zh_CN
2 http://open.weixin.qq.com/download/?lang=zh_CN
2
access_token 获取到的凭证
expires_in
凭证有效时间,单位:秒。正常情况下 access_token
有效期为 7200 秒, 重复获取将导致上次获取的
access_token 失效。
错误时微信会返回错误码等信息, JSON 数据包示例如下(该示例为 AppID 无效错误) :
{"errcode":40013,"errmsg":"invalid appid"}
二、 生成预支付订单
用第一步请求的 access_token 作为参数,通过微信开放平台接口生成预支付订单。 http 请求方式: POST
https://api.weixin.qq.com/pay/genprepay?access_token=ACCESS_TOKEN
Url 中的参数只包含目前微信公众平台凭证 access_token,详细的订单数据放在 PostData
中,格式为 json,示例如下:
{
"appid":"wwwwb4f85f3a797777",
"traceid":"crestxu",
"noncestr":"111112222233333",
"package":"bank_type=WX&body=XXX&fee_type=1&input_charset=GBK¬ify_url=http%3a%2
f%2f
www.qq.com&out_trade_no=16642817866003386000&partner=1900000109&spbill_create_ip=1
27.0.0.1&total_fee=1&sign=BEEF37AD19575D92E191C1E4B1474CA9",
"timestamp":1381405298,
"app_signature":"53cca9d47b883bd4a5c85a9300df3da0cb48565c",
"sign_method":"sha1"
} 其
中, 各字段含义如下: 参数 是否必须 说明
appid 是 应用唯一标识,在微信开放平台提交应用审核通
过后获得
traceid 商家对用户的唯一标识,如果用微信 SSO,此处建议填写
授权用户的 openid
noncestr 32位内的随机串, 防重发
package 订单详情( 具体生成方法见后文)
timestamp 时间戳, 为 1970 年 1 月 1 日 00:00 到请求发起时间的秒

app_signature 签名(具体生成方法见后文)
3
sign_method 加密方式,默认为 sha1
返回结果说明:
正确的 Json 返回示例: {"prepayid":"PREPAY_ID","errcode":0,"errmsg":"Success"}
错误的 Json 返回示例:
{"errcode":48001,"errmsg":"api unauthorized"}
package 生成方法:
A)对所有传入参数按照字段名的 ASCII 码从小到大排序( 字典序) 后, 使用 URL 键值对的格
式( 即 key1=value1&key2=value2…) 拼接成字符串 string1;
B) 在 string1 最后拼接上 key=partnerKey 得到 stringSignTemp 字符串, 并对
stringSignTemp 进行 md5 运算, 再将得到的字符串所有字符转换为大写, 得到 sign 值
signValue。
C)对 string1 中的所有键值对中的 value 进行 urlencode 转码, 按照 a 步骤重新拼接成字符
串, 得到 string2。对于 js 前端程序,一定要使用函数 encodeURIComponent 进行 urlencode
编码(注意!进行 urlencode 时要将空格转化为%20 而不是+)。
D)将 sign=signValue 拼接到 string1 后面得到最终的 package 字符串。
代码示例如下:
// 构造参数列表
List<NameValuePair> params = new LinkedList<NameValuePair>();
params.add(new BasicNameValuePair("bank_type", "WX"));
params.add(new BasicNameValuePair("body", "千足金箍棒"));
params.add(new BasicNameValuePair("fee_type", "1"));
params.add(new BasicNameValuePair("input_charset", "UTF-8"));
params.add(new BasicNameValuePair("notify_url", "http://weixin.qq.com"));
params.add(new BasicNameValuePair("out_trade_no", genOutTradNo()));
params.add(new BasicNameValuePair("partner", "1900000109"));
params.add(new BasicNameValuePair("spbill_create_ip", "196.168.1.1"));
params.add(new BasicNameValuePair("total_fee", "1"));
// 生成 package
StringBuilder sb = new StringBuilder();
for (int i = 0; i < params.size(); i++) {
sb.append(params.get(i).getName());
sb.append('=');
sb.append(params.get(i).getValue());
sb.append('&');
4
}
sb.append("key=");
sb.append(PARTNER_KEY); // 注意: 不能hardcode在客户端,建议genPackage这个过程都由
服务器端完成
// 进行md5摘要前, params内容为原始内容,未经过url encode处理
String packageSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();
return URLEncodedUtils.format(params, "utf-8") + "&sign=" + packageSign;
app_signature 生成方法:
A) 参与签名的字段包括: appid、 appkey、 noncestr、 package、 timestamp 以及 traceid
B) 对所有待签名参数按照字段名的 ASCII 码从小到大排序( 字典序) 后, 使用 URL 键值对的
格式( 即 key1=value1&key2=value2…) 拼接成字符串 string1。
注意:所有参数名均为小写字符
C)对 string1 作签名算法,字段名和字段值都采用原始值,不进行 URL 转义。具体签名算法
为 SHA1 三、 调起微信支付
将第二步生成的 prepayId 作为参数,调用微信 sdk 发送支付请求到微信。
代码示例如下:
PayReq req = new PayReq();
req.appId = Constants.APP_ID;
req.partnerId = Constants.PARTNER_ID;
req.prepayId = result.prepayId;
req.nonceStr = nonceStr;
req.timeStamp = String.valueOf(timeStamp);
req.packageValue = "Sign=" + packageValue;
req.

分享到:
评论

相关推荐

    微信支付接口 For Android上手指南V1.2

    微信支付接口 For Android上手指南V1.2

    完整微信支付接口

    这可能是一个示例的移动端代码目录,包含Android或iOS平台上的微信支付接口集成示例,方便开发者了解在移动设备上如何实现微信支付。 7. **安全性**: 微信支付强调安全,使用SSL加密通信,且对敏感信息如商户...

    安卓 集成微信支付和支付宝支付

    MyPay这个压缩包文件可能包含了示例代码或者集成指南,可以帮助开发者快速上手这两个支付接口的实现。需要注意的是,务必确保交易安全,遵循官方的开发文档和最佳实践,以提供稳定、安全的支付体验。

    微信app接口

    微信支付接口上手指南 (附微信SDK更新说明) SDK的接口和使用请参见微信开放平台上的上手指南(Android) 1 和SDK Sample 2 。这里主要说 明在正常使用微信SDK的第三方app上使用微信支付接口的步骤。

    Android 端微信支付demo,可以支付哦

    在Android平台上实现微信支付功能,开发者通常需要借助微信官方提供的SDK进行集成。微信支付SDK提供了必要的接口和服务,以便应用程序能够发起支付...希望这个详尽的指南能帮助你顺利地在Android应用中集成微信支付。

    Android-EasyPay集成并高度封装了Android平台的微信支付支付宝支付以银联支付

    `Android-EasyPay`就是这样一个专为简化这一过程而设计的库,它高度封装了微信支付、支付宝支付以及银联支付,使得开发者能够快速、简便地实现在Android平台上集成这三种主流的支付方式。 首先,我们来详细了解一下...

    WXVoice_Android_3.0.2.zip

    1. "微信语音SDK(Android版)上手指南.doc":这是一个Word文档,提供了关于如何在Android项目中快速集成和使用微信语音SDK的详细步骤,对初学者尤其有用。 2. "微信语音SDK(Android版)上手指南.pdf":与Word文档相同...

    springboot微信小程序的点餐系统.rar

    这个系统允许用户通过微信小程序进行餐厅菜品的选择、下单和支付等操作。 1. **SpringBoot**: - SpringBoot是Java平台上的一个快速开发框架,简化了Spring应用程序的初始搭建以及开发过程。它内置了Tomcat服务器...

    微信分享官方demo,已排除错误,能直接运行

    微信开放平台提供了适用于Android的SDK,其中包括了必要的库文件和接口文档。开发者需要在项目中引入这些库文件,然后通过调用相应的API来实现分享功能。 在Demo中,`WeChatSDK_sample_Android`这个文件夹很可能是...

    仿微信底部导航

    在移动应用设计中,底部导航(Bottom Navigation)是一种常见的用户界面元素,用于帮助用户在多个主要功能之间快速切换。...微信底部导航的成功在于它简洁直观,易于上手,这也是我们仿造时应该追求的目标。

    小契约微信小程序(交友互动小程序).rar

    这个项目包含的源码适用于Android平台,意味着它能够适应微信小程序在Android设备上的运行环境。下面将对该项目的关键组成部分进行详细解释: 1. **project.config.json**:这是微信小程序项目的配置文件,用于定义...

    支付手机支付平台开发包

    2. **支付接口集成**:开发包通常包含了各种支付网关的API集成,如支付宝、微信支付、银联等。开发者需要理解这些接口的工作原理,以及如何安全地处理交易请求和响应,包括订单生成、支付验证、退款处理等。 3. **...

    仿微信顶部选项卡

    7. **交互一致性**:遵循平台的交互设计指南,如Android的Material Design或iOS的Human Interface Guidelines,以保证用户能够根据习惯快速上手。 8. **性能优化**:因为选项卡可能会加载大量内容,所以需要考虑预...

    更新可运营Oreo易支付开源版/免签支付/个人支付

    这种支付方式可能通过API接口与各种支付网关连接,例如支付宝、微信支付等,使个人或小企业也能方便地接受线上支付。 “个人支付”强调了这个系统尤其适合个体经营者或个人用户使用,他们可能没有公司实体,但仍...

    android首次运行滑动帮助实例(模仿微信)

    在Android开发中,"android首次运行滑动帮助实例(模仿微信)"是一个常见的设计模式,旨在引导新用户熟悉应用的主要功能。这种类型的引导通常被称为“新手教程”或“引导页”,它通过一系列滑动页面展示应用程序的...

    android商城源码(菜鸟商城)

    - **订单处理**:包含订单创建、支付、查询、取消等流程,涉及到了支付接口的集成,如支付宝或微信支付。 - **用户评价**:用户可以对购买的商品进行评价,提供了评论和评分功能。 - **个人中心**:显示用户信息...

    微信第三方登陆demo

    3. **集成SDK**:下载微信SDK,将其导入到你的项目中,根据平台(Android或iOS)遵循相应的集成指南。 4. **实现授权逻辑**:在应用中调用微信SDK提供的登录接口,引导用户授权。成功后,微信会返回一个授权码。 5. ...

    Top_支付API类库

    1. **多渠道支持**:易安卓支付API类库支持多种主流支付方式,包括但不限于支付宝、微信支付、银联支付等,让开发者能够在一个统一的接口下处理不同的支付请求。 2. **简化集成过程**:通过封装支付流程,开发者...

    原生仿微信即时通讯聊天安卓端IOS端APP源码开源 带PC客户端+文档说明.zip

    该压缩包包含的是一个完整的即时通讯聊天应用的源代码,旨在模仿微信的功能和用户体验,适用于Android和iOS平台,并且还包括了PC客户端以及相关的文档说明。这个项目的核心目标是提供一个可自定义、可扩展的解决方案...

Global site tag (gtag.js) - Google Analytics