Android支付——微信支付总结

1、准备工作

在微信开放平台进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。
微信支付的开发方式和支付宝不同,微信支付在客户端不需要太多操作,大多依赖于服务器端。

2、导入jar包

将libammsdk.jar包放入应用工程的libs目录下。

3、修改AndroidManifest.xml文件

在AndroidManifest.xml文件中添加如下代码:

  <!-- ==================== 微信支付配置开始 ==================== -->
        <activity
            android:name="com.subzero.copass.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop" />
  <!-- ==================== 微信支付配置结束 ==================== -->

*** 注意:添加启动模式 android:launchMode=“singleTop”。**

添加权限:

<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"/>

4、创建结果回调页

pay_result.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#FFE1E8EB"
    android:gravity="center_horizontal">
    
	<TextView
	    android:layout_width="fill_parent"
	 	android:layout_height="fill_parent"
		android:gravity="center"
	 	android:textColor="#ff000000"
	 	android:textSize="20dp"
	 	android:text="这个界面用于显示第三方app通过微信支付的结果"/>
	
</LinearLayout>

5、支付结果回调类

需要注意的是这个类必须放在包名为**.wxapi里面。例:包名com.subzero.copass (com.subzero.copass .wxapi.WXPayEntryActivity),否则微信支付结果不会调用这个类来回调微信的支付结果。
微信支付回调的结果resp.errCode。

WXPayEntryActivity.java

/**
 * 微信支付完成后回调onResp函数
 * 此类必须放在包名.wxapi里面。例:包名com.subzero.copass (com.subzero.copass .wxapi.WXPayEntryActivity);
 */
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);
        //微信APP_ID
    	api = WXAPIFactory.createWXAPI(this, PayConfig.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) {
		Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
		String msg = "";
		if (resp.errCode == 0) {
			msg = "支付成功";
		} else if (resp.errCode == -1) {
			msg = "已取消支付";
		} else if (resp.errCode == -2) {
			msg = "支付失败";
		}
		Toast.makeText(WXPayEntryActivity.this, msg, Toast.LENGTH_SHORT).show();
		finish();
	}
}

6、调起支付

微信支付的步骤是先调用服务器接口,由服务器调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付。

微信支付需要手机安装有微信的客户端。如果没有安装微信客户端,无法调起支付。
api.sendReq(req);发送请求或发送响应到微信终端,可以通过IWXAPI的 sendReq 和 sendResp 两个方法来实现。

此接口为微信官方测试接口。实际的微信支付功能请您在支付时调起应用后台的接口获取相应数据并使用api.sendReq(req);方法调起微信支付。

private IWXAPI api; // IWXAPI 是第三方app和微信通信的openapi接口
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pay);
		
		//微信appId
		api = WXAPIFactory.createWXAPI(context, PayConfig.APP_ID);

		Button appayBtn = (Button) findViewById(R.id.appay_btn);
		appayBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android;
			
				Toast.makeText(PayActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show();
		        try{
					byte[] buf = Util.httpGet(url);
					if (buf != null && buf.length > 0) {
						String content = new String(buf);
						Log.e("get server pay params:",content);
			        	JSONObject json = new JSONObject(content); 
						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(PayActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
							// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
							api.sendReq(req);
						}else{
				        	Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
				        	Toast.makeText(PayActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
						}
					}else{
			        	Log.d("PAY_GET", "服务器请求错误");
			        	Toast.makeText(PayActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show();
			        }
		        }catch(Exception e){
		        	Log.e("PAY_GET", "异常:"+e.getMessage());
		        	Toast.makeText(PayActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
		        }
		        payBtn.setEnabled(true);
			}
		});		
	}

此图为APP端调起支付的参数列表。
这里写图片描述

注意:微信支付需要打包APK,否则无法调起微信客户端进行支付,只能在你未登录微信的情况下调起微信登录!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Android应用在集成微信支付时,需要对应用进行签名。签名的目的是为了确保应用的身份和安全性。在正常情况下,通过正确的签名,应用可以正常使用微信支付。 然而,如果在Android应用签名之后,出现微信支付签名错误的情况,可能是由以下原因造成的: 1. 签名文件不正确:在签名应用时,可能使用了错误的签名文件或者签名文件被篡改,导致签名不匹配,从而引发微信支付签名错误。 解决方法:确保签名文件的正确性和完整性,可以重新生成一个正确的签名文件,并在微信开放平台更新应用的签名信息。 2. 签名算法不匹配:微信支付使用的签名算法要求和应用的签名算法不一致,导致签名错误。 解决方法:检查微信支付文档中要求的签名算法和应用所使用的签名算法是否一致,如果不一致,需要对应用的签名算法进行调整。 3. 秘钥不正确:在签名过程中,可能使用了错误的私钥或者公钥,导致签名不匹配。 解决方法:确保使用正确的秘钥进行签名,可以重新生成一个正确的私钥和公钥,并在微信开放平台更新应用的签名信息。 总之,当Android应用在签名之后出现微信支付签名错误时,可以通过检查签名文件的正确性,匹配签名算法和秘钥的正确性等来解决问题。如果问题仍然存在,可以联系微信支付技术支持寻求帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值