原文地址:http://blog.csdn.net/intbird

微信官方文档地址:

t=resource/res_main_tmpl&verify=1&lang=zh_CN" style="font-size:32px">https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN

微信官方Demo:http://download.csdn.net/detail/intbird/8476901

@与server交互通信调用,android端仅仅需获取server參数填入微信.

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

1,开启

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaW50YmlyZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

2,结果(支付和微信分享的Activity要安装api文档上说明的放到指定的包名内),支付结果最好要通知一下server.

3,演示样例

公布使用的签名正确的话取消和成功都能正确通知.

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

@自己測试调用:Android自己请求微信server,一般不会这样搞,仅仅是练习须要这样...

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值第二步要用;

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);
}
} }

解析server响应

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给微信server

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给server

<span style="white-space:pre">	</span>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));
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作为接受微信的支付结果,只是终于结果以server的返回为准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,相应的支付界面

android微信付费的更多相关文章

  1. android微信聊天记录导出到电脑【微信安卓版技巧】

    微信,对它又爱又恨!爱的是微信能替代很多手机通话短信,恨的是有些较早前的手机不能友好支持,比如ytkah之前用的i8000,挺上手的,就是没办法装微信,当时工作需要必须用微信,只好忍痛割爱买了个and ...

  2. 不完全解决Android微信HTML5 播放视频的问题(不显示控制条,可交互)

    首先你需要知道以下内容: http://ad.weixin.qq.com/learn/2-3-3--%E9%80%9A%E7%94%A8%E5%BA%93 这是微信为广告商开放的API,我一直认为只有 ...

  3. Android微信智能心跳方案 (转)

    原创 2015-08-17 phoenix WeMobileDev 前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和W ...

  4. 转-Android微信支付

    http://blog.fangjie.info/android微信支付/ Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“ ...

  5. 中国移动MM Android/OPhone付费SDK--MMBillingSDK,集成问题总结

    原地址:http://www.j2megame.com/html/xwzx/ty/2916.html 中国移动MM Android/OPhone付费SDK--MMBillingSDK,集成问题总结 近 ...

  6. Android微信智能心跳方案

    前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析.我和春哥抓包测试了差不多两个多礼拜 ...

  7. uiautomatorviewer 识别android微信元素报错

    org.xml.sax.SAXParseException; systemId: file:/C:/Users/xxxxxxxxx/AppData/Local/Temp/uiautomatorview ...

  8. Android微信登录、分享、支付

    转载需要著名出处: http://blog.csdn.net/lowprofile_coding/article/details/78004224 之前写过微信登录分享支付第一版: http://bl ...

  9. 解决Android微信支付官方demo运行失败

    Android微信支付官方demo运行失败,在此简单记录一下解决步骤 1.httpclient错误 官方给的demo是eclipse的,打开之后提示httpclient的错误,我知道在as下解决htt ...

随机推荐

  1. CentOS7 安装spark集群

    Spark版本 1.6.0 Scala版本 2.11.7 Zookeeper版本 3.4.7 配置虚拟机 3台虚拟机,sm,sd1,sd2 1. 关闭防火墙 systemctl stop firewa ...

  2. ANDROID PAD版本号 PHONE版本号 源代码有什么 差别?

    ANDROID PAD版本号 PHONE版本号 源代码有什么 差别? 直接把frameworks/base/core/res/res/values/config.xml里面的<bool name ...

  3. (大数据工程师学习路径)第三步 Git Community Book----基本用法(下)

    一.比较提交 - Git Diff 1.比较提交 - Git Diff 你可以用 git diff 来比较项目中任意两个版本的差异. $ git diff master..test 上面这条命令只显示 ...

  4. zoj 3829 Known Notation(2014在牡丹江区域赛k称号)

    Known Notation Time Limit: 2 Seconds      Memory Limit: 131072 KB Do you know reverse Polish notatio ...

  5. 在Jenkins中配置运行远程shell命令

    用过Jenkins的都知道,在Build配置那里有一个Add buld step, 有这样两个选项: 1. Execute Windows batch command 2. Execute shell ...

  6. jvm对大对象分配内存的特殊处理(转)

    前段日子在和leader交流技术的时候,偶然听到jvm在分配内存空间给大对象时,如果young区空间不足会直接在old区切一块过去.对于这个结论很好奇,也比较怀疑,所以就上网搜了下,发现还真有这么回事 ...

  7. kendo ui 单击取消编辑数据grid减少的原因和治疗方法的数据

    kendo ui单击取消编辑数据buttongrid数据缩减.原因grid编辑数据追打datasorce于data寻找阵列数据的存在.假定有不会加入,加入缺席. 首先一个样本: html代码: < ...

  8. NYNU_省赛选拔题(8)

    题目描述 一天萌萌哒孟孟学长去博物馆参观,他想看到更多的东西.博物馆可以表示为N × M细胞的一个矩形区域. “.”表示为路,“*”表示为墙壁,每个墙壁上面都挂有美丽的画卷.孟孟学长可以看到与他所在位 ...

  9. Yeoman generators 创建 ASP.NET 应用程序

    Yeoman generators 创建 ASP.NET 应用程序 上一篇:<Windows 搭建 .NET 跨平台环境并运行应用程序> 阅读目录: Install Node.js Ins ...

  10. projecteuler----&gt;problem=19----Counting Sundays

    You are given the following information, but you may prefer to do some research for yourself. 1 Jan ...