android微信支付

==========================================

预准备:

1,导入微信的libs包libammsdk.jar;

2,测试时使用weixinDemo中的debug_keystore;

3,需要注意应用要通过审核,并且几个Key值正确,一下为微信支付Demo中的值:

//微信公众平台id;

private String app_wx_appid=WxConstants.app_wx_appid;

//微信开放平台和商户约定的密钥

private String app_wx_secret_key="db426a9829e4b49a0dcac7b4162da6b6";

//微信公众平台商户模块和商户约定的密钥

private String app_wx_parent_key="8934e7d15453e97507ef794cf7b0519d";

//微信公众平台商户模块和商户约定的支付密钥

private String app_wx_pay_key="L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K";

// 商家向财付通申请的商家id */

private String app_tx_parent_key = "1900000109";

==========================================

根据微信支付Demo,微信支付分为三步:

第一步,获取accessToken,将accessToken值作为第二步Post的参数;

private class GetAccessTokenTask extends AsyncTask<Void, Void, WxGetAccessTokenResult> {
		@Override
		protected WxGetAccessTokenResult doInBackground(Void... params) {
			WxGetAccessTokenResult result = getAccessToken();
			return result;
		}
		@Override
		protected void onPostExecute(WxGetAccessTokenResult result) {
			if (result.localRetCode == WxLocalRetCode.ERR_OK) {
				GetPrepayIdTask getPrepayId = new GetPrepayIdTask();
				getPrepayId.execute(result);
			}
		}

	}
private WxGetAccessTokenResult getAccessToken() {
		WxGetAccessTokenResult result = new WxGetAccessTokenResult();
		String url = String.format(api_get_access_token,
				"client_credential",
				app_wx_appid,
				app_wx_secret_key);
		byte[] buf = WeixinUtil.httpGet(url);
		if (buf == null || buf.length == 0) {
			result.localRetCode = WxLocalRetCode.ERR_HTTP;
			return result;
		}
		String content = new String(buf);
		result.parseFrom(content);
		return result;
	}

第二步,根据第一步的accesstoken值,将 组装的商品参数Post给微信服务器

private class GetPrepayIdTask extends AsyncTask<WxGetAccessTokenResult, Void, WxGetPrepayIdResult> {
		@Override
		protected WxGetPrepayIdResult doInBackground(WxGetAccessTokenResult... params) {
			WxGetPrepayIdResult result = getPrepayId(params[0]);
			return result;
		}
		@Override
		protected void onPostExecute(WxGetPrepayIdResult result) {
			if (result.localRetCode == WxLocalRetCode.ERR_OK) {
				sendPayReq(result);
			}
		}
	}

组装参数

private WxGetPrepayIdResult getPrepayId(WxGetAccessTokenResult accessTokenResult) {
		String url = String.format(api_get_preorder_id,accessTokenResult.accessToken);
		String entity = appSign.getWxPrepayAppSign();

		WxGetPrepayIdResult result = new WxGetPrepayIdResult();

		byte[] buf = WeixinUtil.httpPost(url, entity);
		if (buf == null || buf.length == 0) {
			result.localRetCode = WxLocalRetCode.ERR_HTTP;
			return result;
		}

		String content = new String(buf);
		result.parseFrom(content);
		return result;
	}

Post给服务器

	private void sendPayReq(WxGetPrepayIdResult result) {

		PayReq req = new PayReq();
		req.appId = app_wx_appid;
		req.partnerId = app_tx_parent_key;
		req.prepayId = result.prepayId;
		req.nonceStr = appSign.getNoncestr();
		req.timeStamp = appSign.getTimestamp();
		req.packageValue = "Sign=" + appSign.getPackageSign();

		List<NameValuePair> signParams = new LinkedList<NameValuePair>();
		signParams.add(new BasicNameValuePair("appid", req.appId));<pre name="code" class="java">

signParams.add(new BasicNameValuePair("appkey", app_wx_pay_key));signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));signParams.add(new BasicNameValuePair("package", req.packageValue));signParams.add(new BasicNameValuePair("partnerid",
req.partnerId));signParams.add(new BasicNameValuePair("prepayid", req.prepayId));signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));req.sign = WeixinUtil.genSign(signParams);wxRequest.sendReq(req);}


第三步:在项目下新建一个包wxapi,建立一个类名为WXPayEntryActivity作为接受微信的支付结果,不过最终结果以服务器的返回为准notify_url:

package net.sourceforge.simcpux.wxapi;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{<pre name="code" class="java"><span style="white-space:pre">	</span>@Override
	public void onResp(BaseResp resp) {
		Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

		if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("支付结果");
			builder.setMessage("支付结果"+String.valueOf(resp.errCode));
			builder.show();
		}
	}

}


==========================================

暂时没想到其他想说的,先看个效果

1,包结构,需要注意的就是接收微信返回结果的那个类名;

2,组装数据,规则在文档中有说明

//package_ 字段生成方法
//package生成方法:
//A)对所有传入参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1;
//B) 在string1 最后拼接上key=partnerKey 得到stringSignTemp 字符串, 并对 stringSignTemp进行md5 运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
//C)对string1 中的所有键值对中的value 进行urlencode 转码,按照a 步骤重新拼接成字符串,得到string2。对于js 前端程序,一定要使用函数encodeURIComponent 进行urlencode编码(注意!进行urlencode时要将空格转化为%20而不是+)。
//D)将sign=signValue 拼接到string1 后面得到最终的package 字符串。

//app_signature生成方法:
//A)参与签名的字段包括:appid、appkey、noncestr、package、timestamp以及 traceid
//B)对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。 注意:所有参数名均为小写字符
//C)对string1 作签名算法,字段名和字段值都采用原始值,不进行URL 转义。具体签名算法为SHA1

3,对应的支付界面

时间: 2024-10-25 13:36:53

android微信支付的相关文章

转-Android微信支付

http://blog.fangjie.info/android微信支付/ Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“移动应用开发”->“Android接入指南”)建议,先把官方这篇文章看完 2.微信支付接口(从“移动应用开发”->“Android开发手册” )(下载官方demohttps://res.wx.qq.com/paymchres/zh_CN/htmledition/download/wxpay/app

Android微信支付SDK开发

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的- 3.AndroidMainfest文件修改 权限 <uses-permission

Android微信支付SDK开发笔记

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的… 3.AndroidMainfest文件修改 权限声明: <uses-permiss

Android微信支付集成开发

项目需要,我们的app中采用了两种支付方式,一种是微信支付,另一种是支付宝支付,这两种方式是目前最受欢迎的方式吧,殊不知,由于各种支付接口的升级,在开发中我们会遇上各种不为人知的问题,今天就顺便记录一下,便于日后查看或者需要的朋友作为一个参考. 开发步骤: 1.新用户微信开放平台进行注册,并认证,认证需要300元,https://open.weixin.qq.com/ 2.登录进行创建应用,按照要求填写IOS的Bundle ID和Android的应用签名及包名,如此应用就创建好了. 3.申请支付

android 微信支付成功,未返回回调页面

可以弹出微信支付的界面,但是支付之后没有进入回调的Activity(WXPayEntryActivity ) 1. 回调的Activity(WXPayEntryActivity.java)必须放在:(你的包名+.wxapi)包内 例如:包名为com.example.ex_example 回调activity则放在名为com.example.ex_example.wxapi 包内

Android微信支付—注意事项

坑点一:PayReq的参数 sign的生成 PayReq对象有个参数为packageValue 而sign生成时要用到packageValue,但是对应的Key是package,这里的key容易弄错 List<NameValuePair> signParams = new LinkedList<NameValuePair>(); signParams.add(new BasicNameValuePair("appid", req.appId)); signPar

Android微信支付第一次成功,以后就失败了

醋狸 镥踉 形 昌 丈 蝴 鹂阱 抻全 嗯绾 末咧 簧诋 〓 妯稷 桃 摄谟 滩 呆奥 碟罨 铫唧 委沅 齿狻 茹构 襞ㄚ 梵滋 扣年 逗隧 汁懒 涣酶 絮簋 胱胙 碍 磲 系瑭 春涌 セ岁 憋汐 裙驭 呛 鲔 腻 仕匐 焱楦 á窨 炸贪 哜 顺祓 怃遄 碣﹂ 茧吗 戆构 ぷ城 Κ骞 求蜀  甙蝇 マ樾 源繇 р摧 瘗阢 机粑 抵钫 チ圆 锿篮 ù 宾 砧鳘 去 蛞 菰  螃坶 骀雄 祆 补寨 篆 歉轿 伤趾 埂 款郾 破 骗笔 蓄 荨 臭

微信支付,支付宝支付,银联支付——三大支付总结

转载:  https://juejin.im/post/596d97576fb9a06bb874a812 银联支付,支付宝支付,微信支付的三大总结,之前也有写过两篇. 微信支付,支付宝支付,银联支付--三大支付总结: http://blog.csdn.net/androidstarjack/article/details/72669394 支付宝植入总结: android 支付宝的植入 <曾经踩过的坑> 微信支付总结: Android 微信支付总结 备注:出于安全考虑,验签我们都是放到后台进行

微信支付(转载一)

Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“移动应用开发”->“Android接入指南”)建议,先把官方这篇文章看完 2.微信支付接口(从“移动应用开发”->“Android开发手册” )(下载官方demohttps://res.wx.qq.com/paymchres/zh_CN/htmledition/download/wxpay/app_wx_pay_tool_android1d902c.zip) Androi