移动开发中,支付类的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 设置

添加必要的权限支持:

  1. <uses-permission android:name="android.permission.INTERNET"/>
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  4. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  5. <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代码:

  1. /**
  2. *  第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
  3. *   arg0。errCode  0成功 -1支付失败 -2取消
  4. */
  5. @Override
  6. public void onResp(BaseResp resp) {
  7. Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
  8. if (resp.errCode == 0) {//支付成功
  9. Intent intent = new Intent();
  10. intent.setAction("fbPayAction");
  11. //          intent.setAction("goodsPayAction");
  12. //          intent.setAction("integraPayAction");
  13. sendBroadcast(intent);
  14. Toast.makeText(getApplicationContext(), "支付成功", 0).show();
  15. finish();
  16. }else if (resp.errCode == -1) {//支付失败
  17. Toast.makeText(getApplicationContext(), "支付失败", 0).show();
  18. finish();
  19. }else {//取消
  20. Toast.makeText(getApplicationContext(), "支付取消", 0).show();
  21. finish();
  22. }

[4] 接收微信的请求及返回值

如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:

a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)



并在manifest文件里面加上exported属性,设置为true,例如:

  1. <!-- 微信支付 -->
  2. <activity
  3. android:name="com.example.xiangcuntiandi.wxapi.WXPayEntryActivity"
  4. android:configChanges="orientation|keyboardHidden|navigation"
  5. android:exported="true"
  6. android:screenOrientation="behind" >
  7. </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代码:

  1. public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
  2. private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
  3. private IWXAPI api;
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.pay_result);
  8. api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
  9. api.handleIntent(getIntent(), this);
  10. }
  11. @Override
  12. protected void onNewIntent(Intent intent) {
  13. super.onNewIntent(intent);
  14. setIntent(intent);
  15. api.handleIntent(intent, this);
  16. }
  17. @Override
  18. public void onReq(BaseReq req) {
  19. }
  20. /**
  21. *  第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
  22. *   arg0。errCode  0成功 -1支付失败 -2取消
  23. */
  24. @Override
  25. public void onResp(BaseResp resp) {
  26. Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
  27. if (resp.errCode == 0) {//支付成功
  28. Intent intent = new Intent();
  29. intent.setAction("fbPayAction");
  30. //          intent.setAction("goodsPayAction");
  31. //          intent.setAction("integraPayAction");
  32. sendBroadcast(intent);
  33. Toast.makeText(getApplicationContext(), "支付成功", 0).show();
  34. finish();
  35. }else if (resp.errCode == -1) {//支付失败
  36. Toast.makeText(getApplicationContext(), "支付失败", 0).show();
  37. finish();
  38. }else {//取消
  39. Toast.makeText(getApplicationContext(), "支付取消", 0).show();
  40. finish();
  41. }
  42. }

生成订单后只需要做如下处理:

我们都只道微信的支付流程是:提交订单到服务器,服务器将信息传递到微信支付的服务器,微信服务器响应后返回数据到自己的服务器,服务器又返回数据到客户端:取出数据后,跳转微信支付界面:、

  1. /        /微信服务器返回的数据:调用这些数据到支付端
  2. >     PayReq req = new PayReq();
  3. req.appId = appid;
  4. req.partnerId = partnerid;
  5. req.prepayId = prepayid;
  6. req.nonceStr = noncestr;
  7. req.timeStamp = timestamp;
  8. req.packageValue = packageValue;
  9. req.sign = sign;
  10. //在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
  11. msgApi.sendReq(req);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">     </span>

注意微信支付,分享,登陆,需要打包后二次签名:才能相应:

可以下载一个获取包的签名工具GenSignature.Apk,下载到手机上,手机上安装打包的Apk即可,得到:

得到后登陆微信开发者平台在填写即可:

这样一个完整的支付功能就做完了

android开发之微信支付功能的实现的更多相关文章

  1. 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)

    1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...

  2. [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)

    1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...

  3. C#开发微信门户及应用(40)--使用微信JSAPI实现微信支付功能

    在我前面的几篇博客,有介绍了微信支付.微信红包.企业付款等各种和支付相关的操作,不过上面都是基于微信普通API的封装,本篇随笔继续微信支付这一主题,继续介绍基于微信网页JSAPI的方式发起的微信支付功 ...

  4. Android 支付宝以及微信支付快速接入流程

    简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:ht ...

  5. ecshop增加pc扫描二维码微信支付功能代码

    ecshop开发网站,如果没有手机版,又想通过微信支付,可以加入pc二维码扫描微信支付功能 工具/原料 ecshop商城系统,phpqrcode,WxPayPubHelper 公众号已申请微信支付 方 ...

  6. 微信小程序 使用微信支付功能实现在线订单支付

    以前做过PC页面微信支付,但是这次在小程序 直接调用微信支付功能还是方便很多 先放个微信官方API链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_a ...

  7. Android开发 对接微信分享SDK总结

    原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...

  8. php 微信开发之 微信支付 V3 开发 -CURLOP_TIMEOUT问题

    如果不懂怎么配置的话请看文章 php 微信开发之 微信支付配置 基本配置后在继续本文章的开发 . 本文章就先继续基本的实现!也并不困难.我大概的思路的返回购买者的唯一id 和 订单号的唯一 id 就2 ...

  9. ThinkPHP5.0 实现 app微信支付功能

    相对于之前随笔写的<ThinkPHP5.0实现app支付宝支付功能>来说,php对接app微信支付功能就相对简单的多了,最近有加我的朋友问到app微信支付,所以我把app微信支付的demo ...

随机推荐

  1. 什么是MVC,什么是WCF

    在C#中总会遇到这几个概念,网上搜了一下,做一下总结和比较,东拼西凑,如有雷同,纯属直接拷贝,人懒,但无意侵权. 1.什么是MVC MVC是三个单词的首字母缩写,它们是Model(模型).View(视 ...

  2. 多类 SVM 的损失函数及其梯度计算

    CS231n Convolutional Neural Networks for Visual Recognition -- optimization 1. 多类 SVM 的损失函数(Multicla ...

  3. 2016最新CocoaPods安装与使用

    前言 是不是已经厌烦了将各种库拖拽到Xcode项目中?那么,CocoaPods的出现就帮你解决了这一问题.CocoaPods是Objective-C项目中最有名的类库管理工具,可以解决库与库之间的依赖 ...

  4. 一、Github博客搭建之jekyll安装

    注意:以下步骤是FQ后操作的,需要了解FQ的可以移步 -> 枫叶主机 一.安装jekyll需要Ruby-2.1.0以上版本,本人是mac pro系统版本10.12.5(macOS Sierra) ...

  5. 小米笔记本(13.3 I7) ubuntu14.04下网卡驱动安装

    ubuntu 内核升级到4.6.4(更高版本可能造成系统无法启动) kernel debian包下载地址 http://kernel.ubuntu.com/~kernel-ppa/mainline/v ...

  6. jquery如何实现动态增加选择框

    jquery如何实现动态增加选择框 一.总结 一句话总结:用jquery的clone(true)方法. 1.如何在页面中复制amazeui加了特效的标签? amazeui中的控件带js方法,不知道那部 ...

  7. 简要分析武汉一起好P2P平台的核心功能

    写作背景 加入武汉一起好,正式工作40天了,对公司的核心业务有了更多的了解,想梳理下自己对于P2P平台的认识. 武汉一起好,自己运营的yiqihao.com,是用PHP实现的,同时也帮助若干P2P平台 ...

  8. GeoTiff如何存储颜色表的研究

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在一次偶然的机会中得知tiff图像时可以存诸颜色表的,心想以后用GeoTiff来保存图像分类图像就十分方便了.于是研究 ...

  9. Session or Cookie?是否需要用Tomcat等Web容器的Session

    Cookie是HTTP协议标准下的存储用户信息的工具,浏览器把用户信息存放到本地的文本文件中. Session是基于Cookie实现的. 2011年4月,武汉群硕面试的时候(实习生),面试官也问过这个 ...

  10. 【C++竞赛 D】树的深度

    时间限制:1s 内存限制:32MB 问题描述 数据结构中定义,树的高度为一棵树中所有节点的层次的最大值.现在yyy有一棵树请你帮他求出该树的高度. 输入描述 第一行一个整数T(1≤T≤20)表示数据组 ...