安卓开发接入微信支付功能的详细步骤(手把手教你一步一步接入,适合小白)

来源:互联网 发布:好运来返奖统计软件 编辑:程序博客网 时间: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 = WXAPIFactory.createWXAPI(this, Constants.WXAPPID, true); 
api.registerApp(Constants.WXAPPID); //Constants.WXAPPID为微信开放平台注册得到的appID

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的值不懂的可以在看下图解说:
 

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
原创粉丝点击