申请资质什么的一大堆东西请自行解决,点击去微信开放平台申请
应用包名:是在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-with-mta:+' }或
- dependencies {
- compile ’com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’
- }
dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' }
参考app端接入流程Android部分,点击查看官方文档
注册AppID,将app注册到微信
- final IWXAPI api = WXAPIFactory.createWXAPI(context, );
- api.registerApp(”wxd930ea5d5a258f4f”);//参数为AppID
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);
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中实现类名为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();
- }
- }
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”/>
<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”/>
<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刚开始不正确等。清除微信缓存可以解决问题,或者干脆卸载重装微信。
</div>
申请资质什么的一大堆东西请自行解决,点击去微信开放平台申请
应用包名:是在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-with-mta:+' }或
- dependencies {
- compile ’com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’
- }
dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' }
参考app端接入流程Android部分,点击查看官方文档
注册AppID,将app注册到微信
- final IWXAPI api = WXAPIFactory.createWXAPI(context, );
- api.registerApp(”wxd930ea5d5a258f4f”);//参数为AppID
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);
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中实现类名为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();
- }
- }
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”/>
<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”/>
<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刚开始不正确等。清除微信缓存可以解决问题,或者干脆卸载重装微信。
</div>