安卓开发接入微信支付功能的详细步骤(手把手教你一步一步接入,适合小白)
来源:互联网 发布:好运来返奖统计软件 编辑:程序博客网 时间:2024/06/02 23:12
微信支付开发步骤:
首先去申请开通微信支付功能(亦可从网上找到申请开通的方法),这里不详细讲解了,自行百度或者按照微信提示操作,主要讲解接入过程。注册微信,主要的是得到app id和key。下面进入详细接入流程;
1.到微信商户平台,下载安卓支付的Demo下载地址:https://pay.weixin.qq.com
2.将下载的demo的libs文件夹下的 libammsdk.jar包,拷贝到自己项目中的libs文件夹下(见下图)
3.在项目上右键,点击properties
4.添加jar包路径(见下图)
5.点击上图中的add jars按钮,之后,在弹出的对话框中,找到自己的项目中的libs文件夹下的libammsdk.jar文件,选中双击。
6. 点击Order and Export按钮,勾选libammsdk.jar包,然后点击ok;(见下图)
7.创建一个类继承自Application,在入口处注册微信api(在onCreate方法中写入以下代码)
api.registerApp(Constants.WXAPPID); //Constants.WXAPPID为微信开放平台注册得到的appID
8.在需要调用微信支付的地方activity里面,发送订单号和金额给你们自己的后台接口,后台根据订单号和金额去微信生成预支付订单,返回json给你,拿到json进行解析。注意:解析的时候只需要解析以下几个数据就可以了,其他不用解析(特别注意:json返回的sign签名不能使用,最后发起支付请求的sign,是你自己对要请求的参数的签名,下面会给出详情步骤)在需要调用微信支付的地方写入以下代码:
8.1
8.2:对返回的json进行解析,解析得到以下图中红色标注的4个字段的值,其他3个字段的值是你自己这边填写的。
其他3个字段的值为:
1.package字段的值为package=“Sign=WXPay”;
8.在需要调用微信支付的地方activity里面,发送订单号和金额给你们自己的后台接口,后台根据订单号和金额去微信生成预支付订单,返回json给你,拿到json进行解析。注意:解析的时候只需要解析以下几个数据就可以了,其他不用解析(特别注意:json返回的sign签名不能使用,最后发起支付请求的sign,是你自己对要请求的参数的签名,下面会给出详情步骤)在需要调用微信支付的地方写入以下代码:
8.1
// 微信支付api声明称全局变量
api = WXAPIFactory.createWXAPI(getApplicationContext(),Constants.WXAPP_ID);
// 判断是否安装微信
if (!api.isWXAppInstalled()) {
return;
}
// 判断微信版本是否支持支付
if (api.getWXAppSupportAPI() < Build.PAY_SUPPORTED_SDK_INT) {
return;
}
8.2:对返回的json进行解析,解析得到以下图中红色标注的4个字段的值,其他3个字段的值是你自己这边填写的。
其他3个字段的值为:
1.package字段的值为package=“Sign=WXPay”;
2.timestamp字段的值为 timestamp=Long.toString(System.currentTimeMillis() / 1000) ;
3.sign字段的值为(这里要根据微信给的签名算法生成签名,具体方法见下图) 这里的key,为申请微信支付时候生成AppSecret;
需要签名的6个字段,首先把这5个字段: appid,partnerid,prepayid,noncestr,timestamp,package按照字段排序进行排序,按照key=value&key2=value2的格式拼接,然后在结尾拼接上(key=申请微信支付时候生成AppSecret的值)。把拼接好的字符串进行md5加密,得到签名sign的值。不懂的可以在看下图解说:
需要签名的6个字段,首先把这5个字段: appid,partnerid,prepayid,noncestr,timestamp,package按照字段排序进行排序,按照key=value&key2=value2的格式拼接,然后在结尾拼接上(key=申请微信支付时候生成AppSecret的值)。把拼接好的字符串进行md5加密,得到签名sign的值。不懂的可以在看下图解说:
8.3在注册清单文件中找到,调用微信支付的activity注册信息,加入下面代码:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="你申请的appId" />
</intent-filter>
9.现在拿到了调用微信支付的所有字段的值,下面就是调用微信支付了,代码如下:
// 给微信支付设置值,发起调用
PayReq req = new PayReq();
req.appId = json.getString("appid");//json返回的值
req.partnerId = json.getString("mch_id");//json返回的值
req.prepayId = json.getString("prepay_id");//json返回的值
req.nonceStr = json.getString("nonce_str");//json返回的值
req.sign = sign;//这个签名是用上面的方法生成的签名
req.timeStamp =Long.toString(System.currentTimeMillis() / 1000);//固定的值
req.packageValue = "Sign=WXPay";//固定的值
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
10.这样就完成了调用微信支付,但是暂时还收不到支付结果,所以接下来就是要实现微信支付后的回调方法。具体方法如下:
1.在你的项目中新建一个包,包名必须为wxapi,否则微信无法回调。比如你的项目包名为com.xixiangfu.test。那么就在test下新建一个包com.xixiangfu.test.wxapi;
然后将下载的微信支付的demo中的WXPayEntryActivity这个类拷贝到这个包下,记得将布局文件也拷贝过去,还有要在AndroidManifest.xml对这个activity进行注册。(如图)
activity注册代码如下:
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent"
android:launchMode="singleTop" />
11.这时候很多人就去运行测试了,这就是一个非常大的坑,这是根本无法调用微信支付,你要做的是要给你的app进行签名,要和你微信注册的地方的签名保持一致(可以参考下微信官方给的签名设置方法:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5),完成签名后才可以进行测试。
12.返回结果代码(这里如果要对展示结果的页面进行自定义,可以在这个类WXPayEntryActivity中进行修改)
注意:调用微信支付,如果不能调起,或者返回-1,先检查签名(一般都是签名错误导致的,回去重新检查签名)、包名是否与开放平台上面的一致,若一致则是服务端的问题,一般是服务端签名问题。
0 0
- 安卓开发接入微信支付功能的详细步骤(手把手教你一步一步接入,适合小白)
- 安卓app接入微信支付
- 最简单的安卓接入微信支付教程,不简单你打我!
- 安卓接入微信支付解析,细数开发过程中遇到的坑
- 安卓开发-微信接入指南
- APP接入微信支付步骤,及遇到的问题
- java微信支付接入详细流程
- 手把手教你简单接入微信SDK
- 接入微信的步骤
- 安卓支付接入
- 手把手教您开发JAVA微信SDK-新手接入
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
- php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
- 微信小程序微信支付接入开发
- 微信支付宝接入开发
- Android开发 接入微信支付 案例
- iOS APP接入微信支付功能的实现(小白篇)
- phpMyAdmin 出现 ---- 缺少 mysqli 扩展,请检查 PHP 配置。
- python如何获取百度搜索结果的真实URL
- 开发APP接口,PHP在Apache下一直返回500错误的原因
- String、StringBuilder、StringBuffer和CharSequence的区别
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
- 安卓开发接入微信支付功能的详细步骤(手把手教你一步一步接入,适合小白)
- 当压测遇见奥运 ——游戏服务器如何在上线时面对用户的洪荒之力
- selenium 2.0 'NoneType' object has no attribute 'send_keys'
- AndroidStudio在gradle文件中修改debug签名为正式签名
- IT-linux-top系列--top静态使用
- 备忘!!
- poj 2676 Sudoku
- 虚拟机NAT模式下ping外网
- objective-c ——代码块