安卓微信支付开发基本流程-demo篇

微信支付的应用场景非常广泛,但是官方文档写的不够详细。我百度了很多资料,结果也不满意,在填了很多坑以后,特意写下此博客,给自己总结,也让后面的人少走些弯路。

微信支付的开发基本流程在官方文档已经说清楚了,由于我们项目的服务器接口还没写好,所以我先导入官方demo看能不能支付成功并成功回调到结果页面。

以Android Studio为例

1.先导入sdk包

 把下载好的libammsdk.jar 文件复制到libs文件夹下,在build.gradle里面配置信息:compile files('libs/libammsdk.jar'),这个没难度,不放图了

调试的时候需要用到appid 测试的时候用官方demo里面的appid即可:wxb4ba3c02aa476ea1

2.核心代码

//1.注册appid
		api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");
		//2.将该app注册到微信
		api.registerApp("wxb4ba3c02aa476ea1");
		//3.预支付请求的服务器地址
		String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";

</pre><p></p><pre>
3.请求服务器获取结果,并调用微信支付
try {
	JSONObject json = new JSONObject(s);
	if(null != json ){
		PayReq req = new PayReq();
		//req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
		req.appId = json.getString("appid");
		req.partnerId = json.getString("partnerid");
		req.prepayId = json.getString("prepayid");
		req.nonceStr = json.getString("noncestr");
		req.timeStamp = json.getString("timestamp");
		req.packageValue = json.getString("package");
		req.sign = json.getString("sign");
		req.extData = "app data"; // optional
		Toast.makeText(context, "正常调起支付", Toast.LENGTH_SHORT).show();
		// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
		api.sendReq(req);
	}else{
		Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
		Toast.makeText(context, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
	}
4.支付成功后的回调页面,一点要在com.xxx.xxx.wxapi包下,也就是最后一个包是wxapi,文件名必须是WXPayEntryActivity

代码,注意在回调支付结果的时候也需要注册密钥,而且和之前那个不一样,这边还用官方demo提供的wxd930ea5d5a258f4f

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

	private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";

	private IWXAPI api;


	@Override public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LogUtil.d("jieguo","ol");

       setContentView(R.layout.activty_res);  
		api = WXAPIFactory.createWXAPI(this, "wxd930ea5d5a258f4f");
		api.handleIntent(getIntent(), this);
	}


	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		setIntent(intent);
		api.handleIntent(intent, this);
	}


	@Override
	public void onReq(BaseReq req) {

	}


	@Override
	public void onResp(BaseResp resp) {
		int errCode = resp.errCode;

		if (errCode == 0) {

			// 0成功 展示成功页面  
			Log.d("test","支付成功的回调方法--onResp--");  
			new AlertDialog.Builder(this).setMessage("支付成功").setPositiveButton("确定", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					dialog.dismiss();
					finish();
				}
			}).setTitle("提示").create().show();


		}
		else if (errCode == -1) {
			//-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 
			LogUtil.d("fail","-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。");
			new AlertDialog.Builder(this).setMessage("支付出错").setPositiveButton("确定", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					dialog.dismiss();
					finish();
				}
			}).setTitle("提示").create().show();
			finish();
		}
		else if (errCode == -2) {
			//-2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。  
			finish();
		}
	}


}  

5.还有一点千万注意,这个WXPayEntryActivity一定要注册,而且要设置下,否则不会调用的

<activity android:name=".wxapi.WXPayEntryActivity"
                  android:exported="true"
                  android:screenOrientation="portrait"/>

我当时还碰到一个坑,支付成功一次以后,就一直报-1的错误了,是因为当前app的签名文件和demo里面的签名不一样。

解决方法:

参考网页 http://www.2cto.com/kf/201604/498327.html

将自己的应用签名换成和微信开放平台上应用签名一致,简单的说就是第一次应用签名的时候有个.keystore文件,拿过来重新布置一下(对于签名不熟悉的童鞋,可以百度一下)。注意一点微信开放平台上面的包名必须和你在配置文件中注册的包名一致我拿官方支付的demo演示一下
这里写图片描述
这里写图片描述


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值