微信支付(转载一)

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)

  • Android端接口文档
  • SDK for Android
  • Sample for Android
  • 服务端demo
  • 退款及对账开发指南、退款及对账demo

结合官方给的demo和《微信支付接口 For Android 上手指南》文档,可以看出,微信支付总共分为4个步骤: (1)利用获取APP_ID 和 APP_SECRET 请求获取 access_token

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/*

* 步骤一:获取AccessToken

*/

private class GetAccessTokenTask extends AsyncTask<Void, Void, GetAccessTokenResult> {

@Override

protected void onPreExecute() {

}

@Override

protected void onPostExecute(GetAccessTokenResult result) {

/*

* 根据获得的access token来开启获取支付id的任务

* 开始步骤二:

*/

GetPrepayIdTask getPrepayId = new GetPrepayIdTask(result.accessToken);

getPrepayId.execute();

}

@Override

protected GetAccessTokenResult doInBackground(Void... params) {

//发网络请求获取access token

}

}

(2)利用access_token,以及partneridAPP_KEY生成预支付订单

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

private class GetPrepayIdTask extends AsyncTask<Void, Void, GetPrepayIdResult> {

protected void onPreExecute() {

}

@Override

protected void onPostExecute(GetPrepayIdResult result) {

/*

* 获取PrepayId之后 开始步骤三

*/

sendPayReq(result);

}

@Override

protected void onCancelled() {

super.onCancelled();

}

@Override

protected GetPrepayIdResult doInBackground(Void... params) {

//获取PrepayId的操作

//这里面涉及到[package 生成方法]和[app_signature 生成方法]等复杂操作参见demo代码及文档

}

}

(3)利用之前的参数以及PARTNER_ID调起微信支付

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

private void sendPayReq (GetPrepayIdResult result) {

PayReq req = new PayReq();

req. appId = Constants. APP_ID;

req. partnerId = Constants. PARTNER_ID;

req. prepayId = result. prepayId;

req. nonceStr = nonceStr;

req. timeStamp = String. valueOf(timeStamp);

req. packageValue = "Sign=" + packageValue;

List signParams = new LinkedList();

signParams.add( new BasicNameValuePair( "appid", req. appId));

signParams.add( new BasicNameValuePair( "appkey", APP_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 = genSign(signParams);

// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信

api.sendReq(req);

}

(4)支付完成后 微信会回调 WXPayEntryActivity 的public void onResp(BaseResp resp)方法,所以后续操作,放在这个回调函数中操作就可以了。 resp.errCode== 0 :表示支付成功 resp.errCode== -1 :表示支付失败 resp.errCode== -2 :表示取消支付

特别注意:

1.第一次很多同学调试微信的官方demo会遇到这样的问题 解决办法https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&lang=zh_CN&token=bc77c2a9db0380aca7d29b1418fa0bccc23070d7

(1)、解压sdk demo工程压缩包,并导入到workspace,如下图:

(2)、选择Eclipse顶部菜单Window->Preferences,在弹出的对话框中,选择Android目录下的Build,如下图: 指定Custom debug keystore选项的路径为sdk demo工程目录中的debug.keystore文件,如下图: 并应用该配置。

(3)、运行该sdk_sample工程。

 

二、当你使用自己申请的appid等参数。

当你在微信开发平台(open.weixin.qq.com)申请一个普通应用时,你会得到: public static final String APP_ID = “wxd930ea5d5a258f4f”; private static final String APP_SECRET = “db426a9829e4b49a0dcac7b4162da6b6″;

当你的应用涉及到微信支付功能是,你需要申请微信支付,申请会有些合同啊什么的,审核通过你会收到邮件,邮件中会有 private static final String APP_KEY(PaySignKey) = “L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K”; // wxd930ea5d5a258f4f 对应的支付密钥

除此之外,还有个微信支付商户申请,申请通过后邮件中会回复: public static final String PARTNER_ID = “1900000109”; private static final String PARTNER_KEY = “8934e7d15453e97507ef794cf7b0519d”;

然后为了支付的安全起见,最好把支付的前两个步骤放在服务器端完成,客户端请求服务器拿到前两个步骤生成的一些参数,然后在客户端做第三步,调起微信支付。

特别注意:

1.可以弹出微信支付的界面,但是支付之后没有进入回调的Activity:WXPayEntryActivity ?

微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXPayEntryActivity.java 其他的接口回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXEntryActivity.java

而且这两个回调的Activity必须要实现IWXAPIEventHandler的接口 。

2.签名问题,总是弹不出微信支付界面,然后就回调-1 ? 这个问题多半是签名错误,或者keystore,包名,签名不一致导致。 (1)在申请微信开放平台的时候需要填写 应用包名和应用签名(这个签名可以用 apk生成),所以这就需要你用正式的 keystore打包应用测试开放平台的接口。

(2)再有错误,就是你第二步生成Prepayid时的app_signature 生成错误,仔细看下demo和文档。

3.注意配置文件中AndroidManifest.xml demo里中有这写配置,似乎对微信支付的调起及回调都有影响,还是按照demo里的,加上这部分配置

XHTML

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<activity

android:name= ".wxapi.WXEntryActivity"

android:label= "@string/app_name"

android:exported= "true"

android:launchMode= "singleTop">

......

<intent-filter >

<action android:name ="android.intent.action.VIEW"/>

<category android:name= "android.intent.category.DEFAULT" />

<data android:scheme ="wxd930ea5d5a258f4f"/><!--  注意这里,似乎对程序有影响,要加上-->

</intent-filter >

</activity >

<receiver

android:name= ".AppRegister">

<intent-filter >

<action android:name= "com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />

</intent-filter >

</receiver >

三、微信其他接口-分享接口

用过微信支付接口之后,其他的微信接口就简单多了。微信的分享 分为分享到朋友圈和分享给好友(即发送消息)两种。

(1)直接调用SDK

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//WXTextObject对象

WXTextObject textObj = new WXTextObject();

textObj. text = text;

//WXMediaMessage对象

WXMediaMessage msg = new WXMediaMessage();

msg. mediaObject = textObj;

msg. description = text;

//SendMessageToWX.Req对象

SendMessageToWX.Req req = new SendMessageToWX.Req();

req. transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求

req. message = msg;

req. scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession ;

req. openId = getOpenId();

// 调用api 接口发送数据到微信

api.sendReq(req);

然后调起 分享的对话框之后就是 微信做的操作,分享完成后一样会回到回调的入口,你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXEntryActivity.java

你可以在onResp中做分享完成的后续操作。

(2)还有一种就是不使用SDK方式分享,参见:http://blog.csdn.net/freesonhp/article/details/10296141

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/**

* 分享信息到朋友

*

* @param file,假如图片的路径为path,那么file = new File(path);

*/

private void shareToFriend(File file) {

Intent intent = new Intent();

ComponentName componentName = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");

intent.setComponent(componentName);

intent.setAction(Intent.ACTION_SEND);

intent.setType("image/*");

intent.putExtra(Intent.EXTRA_TEXT, "测试微信");

intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));

startActivity(intent);

}

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/**

* 分享信息到朋友圈

*

* @param file,假如图片的路径为path,那么file = new File(path);

*/

private void shareToTimeLine(File file) {

Intent intent = new Intent();

ComponentName componentName = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");

intent.setComponent(componentName);

intent.setAction(Intent.ACTION_SEND);

intent.setType("image/*");

intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));

startActivity(intent);

}

这种方式的缺点就是你得不到回调,不知道分享是否成功,但却是一种简单的方式。

原文地址:http://blog.fangjie.info/android%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98/

时间: 2024-11-05 20:40:34

微信支付(转载一)的相关文章

[转载]微信支付

公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需要在商户网页进行选购下单的购买流程.Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付.这种方式,适合无需选购直接支付的购买流程. 以上两种方式最大的区别是:是否需要经

微信支付,别人遇到的坑--转载

微信支付,别人遇到的坑: http://blog.csdn.net/ahence/article/details/50173621 http://www.360doc.com/content/15/0214/10/7044580_448519997.shtml

ectouch 微信支付成功后订单状态未改变的解决办法 (转载)

原文地址: 微信支付支付成功后,返回到mobile/wx_native_callback.php 之前代码 define('IN_ECS', true); require(dirname(__FILE__) . '/include/init.php'); require(ROOT_PATH . 'include/lib_payment.php'); require_once(ROOT_PATH .'include/modules/payment/wx_new_jspay.php'); $paym

微信支付(转载二)

微信支付现在主要集成在:1.移动应用开发  2.网站应用开发  3.公众账号开发 本篇主要针对移动应用App集成微信支付,实际项目坑点分享! 一.既予之.与共之:平台资源 1.微信开放平台:https://open.weixin.qq.com/ 2.微信公众平台:https://mp.weixin.qq.com/ 3.微信支付指引和资源中心:微信支付接入指南和资源下载中心<强力推荐阅读> https://open.weixin.qq.com/cgi-bin/frame?t=resource/r

Android开发 --微信支付开发(转载!)(开发工具:Eclipse)

Android_APP 微信支付接口开发 日期:2015-10-06 12:47:33 作者: 来源: 人气:3549 1.首先说一下我们在开发微信支付接口的时候遇到最多和最疑惑的问题,那就是明明 appid.商户号.API密钥 都对照了好几遍确实是和自己的一样,并且也没有在Log日志中出现签名错误等信息,却始终调不起微信支付,或是直接回到支付结果后的界面并提示 “微信支付结果:null;code=-1”.这就是微信支付中的一个深坑之处(为什么说这是深坑之处呢?会在下面特别说明). 2.下面就教

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

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

MD5加密支付宝支付与微信支付

在做支付宝支付与微信支付时看到两家公司给的dom其中关于MD5加密的 支付宝的dom: DigestUtils.md5Hex(test).toUpperCase(); 微信的dom: private static String MD5(String sourceStr) throws UnsupportedEncodingException { String result = ""; try { MessageDigest md = MessageDigest.getInstance(

atitit.微信支付的教程文档 attilax总结

atitit.微信支付的教程文档 attilax总结 1. 支付流程概览 1 2. 设置支付起始目录   host/app/paydir/ 1 3. 设置oauth验证域名 1 4. 测试目录 可以使用ip,但必须80端口好像. 1 5. 发起测试支付,菜单  host/fromother.jsp 2 6. Start.jsp 2 7. 获取openid的page接口,并制定回调接口 2 8. 开始支付页面 3 9. 生成js调用支付接口 4 10. 注意事项 5 10.1. 预支付的签名and

微信支付系列(2)——jsapi支付源码解析

版权声明:转载请注明出处:http://blog.csdn.net/m0sh1 http://www.share345.com 在微信支付 开发者文档页面 下载最新的 PHP SDK http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求