Android集成微信支付

现在微信支付和支付宝支付已经为移动端支付的主流,上一篇就已经介绍了集成支付宝的流程,本篇不要介绍微信支付是怎么集成的。

 首先:需要到微信支付开放平台申请APPID  需要应用下载地址  应用签名(利用官方提供工具,安装到手机上,在手机上获取),应用的包名必须和上线包名一样


1.到微信支付开发平台下载微信支付Demo

2.导入微信支付Demo,并运行,效果如下:


Demo可以完全支付了说明现在的Demo就已经完全配置好了微信的开发环境了,我们只需要参照这个Demo去配置我们自己的项目即可。
注:测试的Demo只支持调起一起微信支付,如需第二次可在系统设置中清除微信缓存数据即可。

3.创建一个Android项目,界面如下:


activity_main.xml如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="微信支付"
        android:onClick="weixinPay" />

</LinearLayout>

MainActivity.java 如下:

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	
	public void weixinPay(View v) {
		
	}

}

4.配置微信开发环境:

a)把微信Demo中的“libammsdk.jar”复制到我们的项目中

b)把微信Demo中的清单文件中的权限复制到我们的项目中

²  把微信Demo中的清单文件中声明的支付相关的Activity声明复制到我们的项目中。注意,微信支付需要的Activity比较特殊,只需要一个WXPayEntryActivity,这个Activity用于接收微信支付结果,这个Activity不是在jar包中的,是在Demo源码中的,我们需要把Demo中的这个Activity复制到我们的项目中,这个类名不能改,且必须放到我们项目根包下面的wxapi包下。


清单文件:

  <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    activity注册
<activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>


package com.itheima.a14wechatpay.wxapi;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import com.itheima.a14wechatpay.Constants;
import com.itheima.a14wechatpay.R;
import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;

/**
 * 这个Activity用于接收支付结果
 */
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);
        setContentView(R.layout.pay_result);
        
    	api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
        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) {
		// TODO 发请求问自己公司服务器是否支付成功

		if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("提示");
			builder.setMessage("微信支付结果: " + resp.errCode);
			builder.show();
		}
	}
}

Constants类 
public class Constants {
	// APP_ID 替换为你的应用从官方网站申请到的合法appId
    public static final String APP_ID = "wxd930ea5d5a258f4f";

}
5. 找到微信 Demo 中下面的按钮对应的点击事件:

参照这个Activity完成对应的功能,如下:

public class MainActivity extends Activity {

	private IWXAPI api;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");
	}
	
	public void weixinPay(View v) {
     //===========================================修改成服务器的地址
		String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android";
		Toast.makeText(this, "获取订单中...", Toast.LENGTH_SHORT).show();
		
		Listener<String> listener = new Listener<String>() {

			@Override
			public void onResponse(String response) {
try {
					weixinPay(response);
				} catch (Exception e) {
					e.printStackTrace();
				}				
			}
		};
		ErrorListener errorListener = new ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				Log.e("PAY_GET", "异常:"+error.getMessage());
			}
		};
		Request<String> request = new StringRequest(url, listener, errorListener);
		Volley.newRequestQueue(this).add(request);
	}

	protected void weixinPay(String response) throws Exception {
		// 将该app注册到微信
	    api.registerApp(Constants.APP_ID); 

		boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;
		if (!isPaySupported) {
			Toast.makeText(this, "你没有安装微信或者你的微信版本太老", 0).show();
			return;
		}

		JSONObject json = new JSONObject(response); 
		if(null != json && !json.has("retcode") ){
			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(MainActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
			// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
			api.sendReq(req);
		}else{
        	Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
        	Toast.makeText(MainActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
		}
		
	}

}

到此就已经成功集成微信支付了。

支付宝支付流程在上一篇,。地址如下

http://blog.csdn.net/wangxiaohuhu1314/article/details/76191157



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值