android开发之微信支付功能的实现
移动开发中,支付类的App越来越多,对于开发者来说也是不可少的,不可不会的:下面就来说一说支付开发的流程
1.申请你的AppID
请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。
2.下载SDK及API文档
Android Studio环境下:
在build.gradle文件中,添加如下依赖即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
}
3.在代码中使用开发工具包
[1] AndroidManifest.xml 设置
添加必要的权限支持:
- <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"/>
[2] 注册到微信
要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。(如下图所示,可以在程序入口Activity的onCreate回调函数处,或其他合适的地方将你的应用id注册到微信。注册函数示例如下图所示。
官方申请的合法的App—id
public static final String APP_ID = "你的key";
//第三方和微信的接口:
private IWXAPI api;
[3] 发送请求或响应到微信
现在,你的程序要发送请求或发送响应到微信终端,可以通过IWXAPI的 sendReq 和 sendResp 两个方法来实现。
boolean sendReq(BaseReq req);
sendReq是第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面。
boolean sendResp(BaseResp resp);
sendResp是微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。
JAVA代码:
- /**
- * 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
- * arg0。errCode 0成功 -1支付失败 -2取消
- */
- @Override
- public void onResp(BaseResp resp) {
- Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
- if (resp.errCode == 0) {//支付成功
- Intent intent = new Intent();
- intent.setAction("fbPayAction");
- // intent.setAction("goodsPayAction");
- // intent.setAction("integraPayAction");
- sendBroadcast(intent);
- Toast.makeText(getApplicationContext(), "支付成功", 0).show();
- finish();
- }else if (resp.errCode == -1) {//支付失败
- Toast.makeText(getApplicationContext(), "支付失败", 0).show();
- finish();
- }else {//取消
- Toast.makeText(getApplicationContext(), "支付取消", 0).show();
- finish();
- }
[4] 接收微信的请求及返回值
如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:
a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)
并在manifest文件里面加上exported属性,设置为true,例如:
- <!-- 微信支付 -->
- <activity
- android:name="com.example.xiangcuntiandi.wxapi.WXPayEntryActivity"
- android:configChanges="orientation|keyboardHidden|navigation"
- android:exported="true"
- android:screenOrientation="behind" >
- </activity>
b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下图:
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。
//Java代码:
- 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) {
- }
- /**
- * 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
- * arg0。errCode 0成功 -1支付失败 -2取消
- */
- @Override
- public void onResp(BaseResp resp) {
- Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
- if (resp.errCode == 0) {//支付成功
- Intent intent = new Intent();
- intent.setAction("fbPayAction");
- // intent.setAction("goodsPayAction");
- // intent.setAction("integraPayAction");
- sendBroadcast(intent);
- Toast.makeText(getApplicationContext(), "支付成功", 0).show();
- finish();
- }else if (resp.errCode == -1) {//支付失败
- Toast.makeText(getApplicationContext(), "支付失败", 0).show();
- finish();
- }else {//取消
- Toast.makeText(getApplicationContext(), "支付取消", 0).show();
- finish();
- }
- }
生成订单后只需要做如下处理:
我们都只道微信的支付流程是:提交订单到服务器,服务器将信息传递到微信支付的服务器,微信服务器响应后返回数据到自己的服务器,服务器又返回数据到客户端:取出数据后,跳转微信支付界面:、
- / /微信服务器返回的数据:调用这些数据到支付端
- > PayReq req = new PayReq();
- req.appId = appid;
- req.partnerId = partnerid;
- req.prepayId = prepayid;
- req.nonceStr = noncestr;
- req.timeStamp = timestamp;
- req.packageValue = packageValue;
- req.sign = sign;
- //在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
- msgApi.sendReq(req);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
注意微信支付,分享,登陆,需要打包后二次签名:才能相应:
可以下载一个获取包的签名工具GenSignature.Apk,下载到手机上,手机上安装打包的Apk即可,得到:
得到后登陆微信开发者平台在填写即可:
这样一个完整的支付功能就做完了
android开发之微信支付功能的实现的更多相关文章
- 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- C#开发微信门户及应用(40)--使用微信JSAPI实现微信支付功能
在我前面的几篇博客,有介绍了微信支付.微信红包.企业付款等各种和支付相关的操作,不过上面都是基于微信普通API的封装,本篇随笔继续微信支付这一主题,继续介绍基于微信网页JSAPI的方式发起的微信支付功 ...
- Android 支付宝以及微信支付快速接入流程
简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:ht ...
- ecshop增加pc扫描二维码微信支付功能代码
ecshop开发网站,如果没有手机版,又想通过微信支付,可以加入pc二维码扫描微信支付功能 工具/原料 ecshop商城系统,phpqrcode,WxPayPubHelper 公众号已申请微信支付 方 ...
- 微信小程序 使用微信支付功能实现在线订单支付
以前做过PC页面微信支付,但是这次在小程序 直接调用微信支付功能还是方便很多 先放个微信官方API链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_a ...
- Android开发 对接微信分享SDK总结
原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...
- php 微信开发之 微信支付 V3 开发 -CURLOP_TIMEOUT问题
如果不懂怎么配置的话请看文章 php 微信开发之 微信支付配置 基本配置后在继续本文章的开发 . 本文章就先继续基本的实现!也并不困难.我大概的思路的返回购买者的唯一id 和 订单号的唯一 id 就2 ...
- ThinkPHP5.0 实现 app微信支付功能
相对于之前随笔写的<ThinkPHP5.0实现app支付宝支付功能>来说,php对接app微信支付功能就相对简单的多了,最近有加我的朋友问到app微信支付,所以我把app微信支付的demo ...
随机推荐
- Dcloud课程3 什么是HBuilder和MUI
Dcloud课程3 什么是HBuilder和MUI 一.总结 一句话总结:DCloud(数字天堂)推出一款支持HTML5的Web开发IDE.最大的特点是快.MUI是高性能App的框架,也是目前最接近 ...
- HDU 5237 Base64
Base64 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- TTS-零基础入门之语音模板化
上篇介绍了TTS的一个简单样例http://blog.csdn.net/u010176014/article/details/47326413 本篇咱们进一步聊聊 语音怎样读模板. 比方 公交车上的模 ...
- 【例题 6-6 UVA - 679】Dropping Balls
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直接模拟会超时. 根据奇偶的规律.直接判断会往哪里走就好. 每个二叉树的节点.必然是左边和右边走的次数对半分.->奇数左边多一 ...
- swift项目第一天:环境部署
一:项目部署 项目部署 一.开源中国(OSChina) 网站地址:https://git.oschina.net/ 开源中国社区成立于2008年8月,其目的是为中国的IT技术人员提供一个全面的.快捷更 ...
- 关于DMA
用串口在dma中发东西的时候,,, 要判断DMA里是不是由东西,是不是在占用 当多个外设再用DMA的时候,,,要查看DMA有没有占用 一包数没发完,不要再传另一包
- 【u247】生物进化
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在一片茂密的原始森林中,生物学家们发现了几种远古时期的动物化石.他们将化石依次编号为1,2,3,--n ...
- UVA 10106 Product (大数相乘)
Product The Problem The problem is to multiply two integers X, Y. (0<=X,Y<10250) The Input The ...
- Swift3.0 功能二 (表情键盘与图文混排)
随着iOS越来越多表情键盘以及图文混排的需求,本文运用Swift3.0系统的实现其功能以及封装调用方法,写的不好,如有错误望各位提出宝贵意见,多谢 项目源码地址: 相关知识点都有标识 项目源码地址 废 ...
- [CSS] Draw Simple Icons with CSS
Using pseudo-elements like ::before and ::after we can draw some simple icons without having using i ...