怎么接支付宝微信微信扫码支付接口口

个人用户如何获得支付接口? - 知乎113被浏览36940分享邀请回答54 条评论分享收藏感谢收起43 条评论分享收藏感谢收起查看更多回答android接入微信支付时如何实现接入支付宝进行支付
android接入微信支付时如何实现接入支付宝进行支付。接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务。
首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~
当然还是老规矩啦,上来肯定的贴上官网地址,因为我这些服务天天在更新,而我的文章是教大家方法,而让你不是照葫芦画瓢
进入app支付文档有两种方式,一种是直接在下面的开放业务里
还有一种是通过上面的导航栏文档中心,然后滚动到业务接入那一栏,可以看到移动支付
当然也可以直接打开这个地址,文档还是挺多,可以关注我勾选的这几项
首先这里我也要说明的是个人是不能申请的,只能是企业,所以我demo里面的用的一些资料也是demo里面的
这里是交互流程的官方文档,需要详细的可以点进去看看
我们来到官方demo的下载地址
可以看到有两个,选择你需要的就行了,下载解压完直接导入eclipse并配置一些参数运行就可以查看效果了
将demo里面的alipaySdk-.jar拷贝到我们工程的libs下,并添加到依赖中
订单数据生成
这一步,可以在服务端完成,也可以在本地完成
String orderInfo = getOrderInfo(&测试的商品&, &该测试商品的详细描述&, &0.01&);
* 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中!
String sign = sign(orderInfo);
* 仅需对sign 做URL编码
sign = URLEncoder.encode(sign, &UTF-8&);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
* 完整的符合支付宝参数规范的订单信息
final String payInfo = orderInfo + &&sign=\&& + sign + &\&&& + getSignType();
Runnable payRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(MainActivity.this);
// 调用支付接口,获取支付结果
String result = alipay.pay(payInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
处理支付结果
@SuppressLint(&HandlerLeak&)
private Handler mHandler = new Handler() {
@SuppressWarnings(&unused&)
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((String) msg.obj);
* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc./doc2/
* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
* docType=1) 建议商户依赖异步通知
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为&9000&则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, &9000&)) {
Toast.makeText(MainActivity.this, &支付成功&, Toast.LENGTH_SHORT).show();
// 判断resultStatus 为非&9000&则代表可能支付失败
// &8000&代表支付结果因为支付渠道原因或者原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, &8000&)) {
Toast.makeText(MainActivity.this, &支付结果确认中&, Toast.LENGTH_SHORT).show();
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(MainActivity.this, &支付失败&, Toast.LENGTH_SHORT).show();
这里支付成功了,只是提示用户,还得从服务器确认是否正在支付了,我这里只写了本地,其他如果在服务端实现是一样的,你把这代码直接发给后端就行了(如果后端是开发),可以看到我们已经成功调起支付宝服务了
完整代码:
package cn.woblog.
import android.annotation.SuppressL
import android.app.AlertD
import android.content.DialogI
import android.os.B
import android.os.H
import android.os.M
import android.support.v7.app.AppCompatA
import android.text.TextU
import android.view.V
import android.widget.T
import com.alipay.sdk.app.PayT
import java.io.UnsupportedEncodingE
import java.net.URLE
import java.text.SimpleDateF
import java.util.D
import java.util.L
import java.util.R
import cn.woblog.testalipay.domain.PayR
import cn.woblog.testalipay.util.SignU
public class MainActivity extends AppCompatActivity {
public static final String PARTNER = &&;
// 商户收款账号
public static final String SELLER = &&;
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = &&;
private static final int SDK_PAY_FLAG = 1;
@SuppressLint(&HandlerLeak&)
private Handler mHandler = new Handler() {
@SuppressWarnings(&unused&)
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((String) msg.obj);
* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc./doc2/
* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
* docType=1) 建议商户依赖异步通知
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为&9000&则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, &9000&)) {
Toast.makeText(MainActivity.this, &支付成功&, Toast.LENGTH_SHORT).show();
// 判断resultStatus 为非&9000&则代表可能支付失败
// &8000&代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, &8000&)) {
Toast.makeText(MainActivity.this, &支付结果确认中&, Toast.LENGTH_SHORT).show();
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(MainActivity.this, &支付失败&, Toast.LENGTH_SHORT).show();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void testAlipay(View view) {
if (TextUtils.isEmpty(PARTNER) || TextUtils.isEmpty(RSA_PRIVATE) || TextUtils.isEmpty(SELLER)) {
new AlertDialog.Builder(this).setTitle(&警告&).setMessage(&需要配置PARTNER | RSA_PRIVATE| SELLER&)
.setPositiveButton(&确定&, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i) {
}).show();
String orderInfo = getOrderInfo(&测试的商品&, &该测试商品的详细描述&, &0.01&);
* 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中!
String sign = sign(orderInfo);
* 仅需对sign 做URL编码
sign = URLEncoder.encode(sign, &UTF-8&);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
* 完整的符合支付宝参数规范的订单信息
final String payInfo = orderInfo + &&sign=\&& + sign + &\&&& + getSignType();
Runnable payRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(MainActivity.this);
// 调用支付接口,获取支付结果
String result = alipay.pay(payInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
* create the order info. 创建订单信息
private String getOrderInfo(String subject, String body, String price) {
// 签约合作者身份ID
String orderInfo = &partner=& + &\&& + PARTNER + &\&&;
// 签约卖家支付宝账号
orderInfo += &&seller_id=& + &\&& + SELLER + &\&&;
// 商户网站唯一订单号
orderInfo += &&out_trade_no=& + &\&& + getOutTradeNo() + &\&&;
// 商品名称
orderInfo += &&subject=& + &\&& + subject + &\&&;
// 商品详情
orderInfo += &&body=& + &\&& + body + &\&&;
// 商品金额
orderInfo += &&total_fee=& + &\&& + price + &\&&;
// 服务器异步通知页面路径
orderInfo += &&ify_url=& + &\&& + &https://notify.msp.hk/notify.htm& + &\&&;
// 服务接口名称, 固定值
orderInfo += &&service=\&mobile.securitypay.pay\&&;
// 支付类型, 固定值
orderInfo += &&payment_type=\&1\&&;
// 参数编码, 固定值
orderInfo += &&_input_charset=\&utf-8\&&;
// 设置未付款交易的超时时间
// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
// 取值范围:1m~15d。
// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
// 该参数数值不接受小数点,如1.5h,可转换为90m。
orderInfo += &&it_b_pay=\&30m\&&;
// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
// orderInfo += &&extern_token=& + &\&& + extern_token + &\&&;
// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
orderInfo += &&return_url=\&\&&;
// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
// orderInfo += &&paymethod=\&expressGateway\&&;
return orderI
* sign the order info. 对订单信息进行签名
* @param content 待签名订单信息
private String sign(String content) {
return SignUtils.sign(content, RSA_PRIVATE);
* get the sign type we use. 获取签名方式
private String getSignType() {
return &sign_type=\&RSA\&&;
* get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范)
private String getOutTradeNo() {
SimpleDateFormat format = new SimpleDateFormat(&MMddHHmmss&, Locale.getDefault());
Date date = new Date();
String key = format.format(date);
Random r = new Random();
key = key + r.nextInt();
key = key.substring(0, 15);
如果要测试demo,请替换MainActivity中PARTNER,SELLER,RSA_PRIVATE为你申请到的值。支付宝微信支付接入详细流程
随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成!
1、首先,我们需要前往支付宝开放平台,申请我们的支付功能:/platform/home.htm
支付宝首页
这里 有两个需要注意的地方 一个是管理中心,另外一个是我的支付宝
管理中心:
管理中心 我们需要 创建一个应用 提交给支付宝进行审核。
我的支付宝:
在这里我的支付宝 是一个商户版,一会我们会需要在这里处理一下相关的 密匙
简单介绍完了,那么我们开始进入代码接入流程
一、我们需要到支付宝的sdk地址下载相关的sdk,这个不用我介绍吧
https://doc./doc2/detail.htm?spm=a219a..0.P0wrvI&treeId=54&articleId=104509&docType=1
SDK下载后 长这样哦:
这里我们需要关注的是:客户端和OpenSSL &解压客户端里面的 Android压缩包 打开看看-_-# eclipse...
不过不影响我们把它变成 studio工程
导入到 studio以后 会发现,真的没什么东西,好简单。
下面我们看看内部代码中比较重要的地方:
商户ID、收款账号、pkcs8的私钥、公钥:这里 公钥可不填
那么商户是什么?
收款账号:收款账号就是该支付宝账号,比如
这里最重要的就是公钥 和 私钥 的配置了 ,公钥 就是支付宝 所需要的密钥,私钥是我们客户端所需要的密钥。首先我们来看看 公钥如何生成。
当前页面 填写好支付宝密码 &和 手机验证码我们会进入以下界面:
注意看 里面的 RSA 加密 ,我已经添加过 所以是查看 如果没添加过 那么这里显示的是添加
好了 我们这个公钥 从那里来呢?回到我们下载的SDK 目录中 打开 OpenSSL 你会看到一个 生成命令的 &TXT文档:
RSA密钥生成命令
生成RSA私钥
openssl&genrsa -out rsa_private_key.pem 1024
生成RSA公钥
openssl&rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
将RSA私钥转换成PKCS8格式
openssl&pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
注意:“&”符号后面的才是需要输入的命令。
如果在mac下 那么 可以直接使用 openssl 如果是win 下 那么 需要 &openssl路径下找到bin文件夹进入以后双击 openssl.exe 就ok了
首先进入 openssl目录
生成后 我们可以通过 txt等工具 打开我们的 公钥
在这里 我们填写到支付宝的公钥 是 排除 -----BEGIN PUBLIC KEY-----和 -----END PUBLIC KEY-----以及制表符的 我们简单出来下效果
不可以有空格和和制表符号 将串嘛 复制到 刚刚我们提到的 合作伙伴秘钥中。
同理:继续改造我们的 私钥 将 私钥 放置到我们的 代码中。
配置完成了 ,那么另外需要注意的地方 就是& getOrderInfo()方法了
见到就介绍到这里,开始集成你的支付宝吧(☆_☆)
二、Android快速实现微信支付
如果你已经成功集成了微信登录和分享,那么此文将助你快速集成微信支付,此文基于微信支付SDK3.1.1,也就是目前为止最新的SDK
不过我相信,即便你看了微信的官方文档,你依然不知道微信支付怎么集成,因为微信支付的官方文档简直太.....
如果你已经准备好了资源包,接下来正式开始集成
我们需要的资源其实有以下几样,在开始前,就这些转备好吧
1)微信支付的APPID
2)微信支付依赖包 &&&libammsdk.jar
3)一个Activity类 &&&WXPayEntryActivity.java
这里需要特别说明一下,这个Activity类,直接从上下载到的范例代码中copy到自己的工程中即可,这个页面是在你调起微信支付完成支付(或取消或失败)后,再回到你的App时会调用的一个页面。页面的布局可以是你自定义的布局,直接放图讲解:
先说一下这个类的路径,网上也有一大堆介绍了,我直接放图,路径一定,而且必须是这样的:
WXPayEntryActivity 的路径
在这个类中需要注意的地方有两个:
1、这个类中的布局是可以自定义的,如果你不需要展示什么布局,而是要跳转页面,把这段代码删除即可
回调页面的布局
2、回调结果的处理,下面是官方的处理方式,直接给了一个dialog,很多人会摸不着头脑,如果你不需要这个dialog,直接删除就好了,不需要把官方demo中的布局和资源都复制过来
官方的处理方式
下面是我自定义的处理方式,比较简单,就是土司显示了一下支付结果,如果你需要支付成功后跳转,那么直接在这里startActivity即可,别忘记最后要将这个页面finish()
自定义的处理方式
这个类中的其余的回调方法,我们都不需要去操作
然后我们就可以开始支付了,支付很简单,真的很简单
这是微信支付需要我们携带的参数,对于新人来说,可能比较困惑的是我怎么生成这些参数呢?其实这些参数都是服务器返回给我们的,APPID我们可以自己保存在本地一份,其余的都是服务器返回给我们的,大概介绍一下流程:
发起支付的流程,提交订单的时候的参数根据项目需要配置
最后,服务器返回给我们微信支付的参数后,我们就可以愉快的支付了,这里是关键一步,注意!!
发起支付的关键步骤
至此我们已经可以调起微信支付页面来支付了
最后还有一个需要注意的是,很多人被这一步坑了,就是关于微信开放平台签名的问题。其实只要你手机上的程序的签名和你在微信平台登记的签名一致即可,无论是debug版本,还是release版本
微信开放平台签名
为了方便测试,我暂时填写的是我debug的签名,当然这个是可以改的,修改后会有审核期,几天就不知道,有时会很快,当应用快上线之前,记得去改为正式的签名即可,修改次数我也不知道了,可以自行百度一下!
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?

我要回帖

更多关于 支付宝微信支付接口 的文章

 

随机推荐