第三方支付与登陆这样的模块一般只用集成过一遍以后如果第三方提供的lib包无重大bug之后便可以直接拿来引用以节约时间因此记录一下
微信支付总体来说可分为三个模块
- 集成
- 获取prepay_id
- 支付测试
1.集成
1.进入微信开放平台地址 中创建自己的应用当应用创建完成之后需要注意的有两点地方
其一:应用的AppID
其二:安装包的应用签名
以下为一个已通过审核的app示例
微信支付或者是微信登陆与应用的签名是息息相关的,如果你这里填写的是用自己电脑keystore打出来的apk文件签名, 那么要想调起微信支付或者是微信登陆 安装包必须都由这个keystore来打包 ,否则调起是无反应的 ,微信提供一个签名查询apk不过并不能将生成的签名复制,在此推荐新浪微博的签名查看apk地址:新浪微博签名下载
2.微信支付官方给出的Demo在微信支付官方Demo可以进行下载 微信支付只有一个libs需要添加引用名为libammsdk.jar将该jar包引用到自己项目libs中即可。在Studio集成的过程中可能会遇到BasicNameValuePair报错的情况, 此时是因为缺少 org.apache.http包 ,在studio中添加依赖即可
微信支付有多种支付方式一般开发用到的为手机App支付 ,微信支付的回调页面需要放在 工程根目录下新建一个wxapi包同时该Activity的名字为WXPayEntryActivity在AndroidManifest.xml中需要进行声明
<activity
android:name="com.bm.inyue.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" >
</activity>
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
在此将我集成的微信支付一些相关的文件传到网盘地址为 链接:http://pan.baidu.com/s/1dEVfZwd 密码:6ivv
上图为微信支付关键代码的目录 我们所用到的为GetPrepayIdTask 其他的大多为配置文件配置即可
public class Constants {
// appid
public static final String APP_ID = "xxxx";
// 商户号
public static final String MCH_ID = "xxxx";
// key
public static final String API_KEY = "xxxx";
}
这三个key 第一是在上面有提到的AppID,下面两个获取是在应用开启微信支付的功能之后会通过邮件给一个商户账号去登陆商户平台 登陆地址 在里面可以看到商户号,这个API_KEY需要用户手动设置设置地址在
以上三个需要严格对照
获取prepay_id
prepay_id为微信预支付id 获取的方式有两种 其一为App调取微信的api来获取 其二为后台集成 App调取后台接口来获取 第一种方式有可能会出现后台接收不到回调的情况有待考证 所给出的微信支付代码中是第一种方式 在获取预支付id的过程中 有可能会出现报错 为签名错误 当出现签名错误时可以从以下几点进行判断
1.包名
2.应用的md5值与微信开放平台填写的是否为同一打包文件所打包出来的
3.签名错误
微信也提供在线接口去进行签名的对比测试 地址为签名对比地址
有可能会出现 签名与在线签名生成的一致,但是还是报签名错误的问题,解决办法为:在API_KEY中设置其他的key再改回来即可
有可能会出现,签名正确调起无效的问题,解决办法为:设置应用清除应用数据即可
支付测试
以上步骤如无问题即可进行支付了 回调在WXPayEntryActivity中