申请资质什么的一大堆东西请自行解决,点击去微信开放平台申请
应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值
应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名。点击下载签名工具
最终我们得到的AppID,AppSecret,PartnerID。
下面是app工程接入步骤:
引入sdk。可以下载sdk或者通过Gradle依赖
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
参考app端接入流程Android部分,点击查看官方文档
注册AppID,将app注册到微信
final IWXAPI api = WXAPIFactory.createWXAPI(context, null);
api.registerApp("wxd930ea5d5a258f4f");//参数为AppID
调起支付
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(request);
以上参数信息请查看官方文档
支付回调
在包名中新建一个包,即{$包名}.wxapi 。在{$包名}.wxapi中实现类名为WXPayEntryActivity类(包名或类名不一致会造成无法回调),该类实现IWXAPIEventHandler,如下:
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private final IWXAPI api=WXAPIFactory.createWXAPI(this, URL.WX_APP_ID);
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
toastShort( "openid = " + baseReq.openId);
}
@Override
public void onResp(BaseResp baseResp) {
if (baseResp.errCode==0){
//微信支付成功
toastShort("支付成功");
}else if (baseResp.errCode==-2){
//取消支付
toastShort("用户取消支付");
}else {
//支付出错
toastShort(baseResp.errCode+baseResp.errStr);
}
finish();
}
private void toastShort( String msg) {
Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
}
}
回调中errCode值列表
名称 | 描述 | 解决方案 |
---|---|---|
0 | 成功 | 展示成功页面 |
-1 | 错误 | 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 |
-2 | 用户取消 | 无需处理。发生场景:用户不支付了,点击取消,返回APP。 |
AndroidManifest.xml 设置
添加必要的权限支持:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
回调页配置
<activity
android:name="net.sourceforge.simcpux.wxapi.WXPayEntryActivity"
android:exported="true"//必须
android:launchMode="singleTop"/>
总结遇到的坑,签名什么的,必须配置好,还有运行的时候要keystore签名打包,有时候偷懒配置debug的keystore就是正式的keystore,偶尔会出现意想不到的错误。比如我遇到的问题,api.sendReq(request)成功却未唤醒微信app,回调返回errCode是-1;反复检查了签名什么的都没错(有的也都改了),然而就是不成功。原因不在我的app,而是微信缓存的我的app注册到它的签名问题,比如keystore发生了改变,appid刚开始不正确等。清除微信缓存可以解决问题,或者干脆卸载重装微信。