APP怎样接入支付宝或微信支付宝二维码合一

转自 &/question/
作者:Wang Fei链接:/question//answer/来源:知乎著作权归作者所有,转载请联系作者获得授权。
1、首先,你要有一间五证齐全的公司2、然后用这些材料,去支付宝注册一个商家账户(审核周期大概5个工作日),或者微信的开发者账号(审核周期大概5个工作日,300元费用),或者银联、paypal(这俩个我不太熟悉)3、然后申请开通手机端的支付产品,支付宝的话就是“移动快捷支付”(支付时跳转到支付宝APP,需要用户安装支付宝APP),或者“移动WAP网页支付”(支付时打开一个WebView里边登陆支付宝进行支付),微信的话,需要你的app已经上架有了APPID,才能开通;大概也是5个工作日4、然后就是技术集成了,支付宝和微信会提供给你一个32位的秘钥,用于防篡改效验(或者你采用RSA加密的话,需要给他上传你的公钥);你需要有一个自己的支付后台服务器,来处理加密、获取支付令牌的后台处理;技术集成比较复杂就难以在这里细说了,大概流程如下图:5、把你的APP和你的支付后台接通,就可以在APP端使用第三方支付了建议你的产品第一版使用支付宝的Wap支付,在客户端只需要新建一个WEB VIEW,调用你的后台服务器URL并传参,就可以进行支付,实施成本低而且跨平台真的想要高质量的实施的话,还要考虑通讯加密、防掉单、防重复支付等安全性问题利益相关:海外投行IT风控系统开发,银行系统、互联网第三方支付公司从业人员,我自己的公司在做帮创业公司实施支付后台系统的项目(引自我对这个问题的回答:)-----4月9日添加附录:微信支付API文档:支付宝API文档:在支付宝商户后台登陆后可以下载到pdf,知乎传不了附件
阅读(...) 评论()Android 微信支付和支付宝支付 快速接入 - 简书
Android 微信支付和支付宝支付 快速接入
现在的支付潮流莫过于微信跟支付宝了,最近我们项目涉及到会员需求,就用到微信支付跟支付宝支付,说实话接入之前会觉得这个复杂,等真正去动手实践的时候才觉得狠简单,真的狠简单。从接入到支付一步到位,Run完直接调起了微信跟支付宝。接入前也看了这两个支付的详细接入文档,但是看是一码事,做也是一码事。所以实践很重要。
之所以说狠简单而且快速接入,主要是因为我们公司的运维后台很给力,把微信的一些请求参数,全部后台返回给我们,我们直接用实体是接受拿到就好。
先说下微信支付吧,毕竟相对于支付而言,还是支付宝简单快速一点,就留到后面说了
1.如果你已经成功集成了微信登录和分享,直接用你的 libammsdk.jar和 WECHAT_APP_ID就可以了, 那么下面帮你快速集成微信支付。
2.接入前可以看看上面链接的文档,不过微信官方的文档写的不够好,好多开发者吐槽,至今也没改善点啥。3.好了直接说接入,接入微信支付SDK前准备下面三个东西,如果你集成了微信分享,登录那只需要一个 WXPayEntryActivity 类就行了①
微信支付的APPID②
微信支付依赖包
libammsdk.jar③
一个Activity类
-----------
WXPayEntryActivity
这里需要特别说明一下,这个WXPayEntryActivity 类,直接从微信官方下载的Demo代码中copy到自己的工程中即可,这个页面是在你调起微信支付完成支付(或取消或失败)后,再回到你的App时会调用的一个页面。页面的布局可以是你自定义的布局(一般做法是直接注释掉这个布局)网上copy的一张图讲解:
WXPayEntryActivity 的路径
4、WXPayEntryActivity中的布局是可以自定义的,如果你不需要展示什么布局,而是要跳转页面,把这段代码删除即可
* -Created by Luke on .
public class WXPayEntryActivity extends AppCompatActivity
private static final String TAG = WXPayEntryActivity.class.getSimpleName();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.pay_result);
BaseApplication.api.handleIntent(getIntent(), this);
WECHAT_APP_ID 已经在BaseApplication中定义了 在这里不需要再写
5.下面是回调的逻辑,官方是这样的图
官方回调页面
我这边就简单的演示下支付成功的地方
public void onResp(BaseResp resp) {
LogUtil.d(TAG, "Luke = " + resp.toString());
if (resp.getType() == MAND_PAY_BY_WX) {
int code = resp.errC
switch (code) {
ToastUtil.show("支付成功");
ToastUtil.show("支付失败");
ToastUtil.show("支付取消");
ToastUtil.show("支付失败");
setResult(RESULT_OK);
接下来咱就把这个WXPayEntryActivity放在清单manifest文件里面注册,然后加上exported属性,设置为true:
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.NoActionBar"/&
注意的地方:
展示成功页面
可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
无需处理。发生场景:用户不支付了,点击取消,返回APP。
6.这个类中的其余的回调方法,我们都不需要去操作。然后我们就可以开始支付了,蛮简单
下面是请求的参数列表,我们都是服务器端返回,包括APPID,直接用已经正式的sign。
微信支付请求参数列表
大概的支付流程是①
点击支付的时候创建订单,获取订单号orderNumber (或者在需要获取订单号的时候获取)②
通过你的价格和这个orderNumber去请求微信返回的一堆参数,以及调起支付页面:下面是关键的一步:
//PrePayWeChatEntity 服务器返回给我们微信支付的参数
private void WeChatPay(PrePayWeChatEntity data) {
if (null == data) {
//判断是否为空。丢一个toast,给个提示。比如服务器异常,错误啥的
IWXAPI api = WXAPIFactory.createWXAPI(this, data.getAppid());
if (!isWXAppInstalledAndSupported(api)) {
// throw new WeChartNoFoundException();
ToastUtil.show(getString(R.string.text_uninstalled_wchat));
根据服务器返回的json数据创建的实体类对象
PayReq req = new PayReq();
req.appId = data.getAppid();
req.partnerId = data.getPartnerid();
req.prepayId = data.getPrepayid();
req.packageValue = data.getPkgstr();
req.nonceStr = data.getNoncestr();
req.timeStamp = data.getTimestamp();
req.sign = data.getSign();
api.registerApp(data.getAppid());
//发起请求
api.sendReq(req);
7.到这就是成功了,调起了微信支付。再回到 WXPayEntryActivity
中去判断成功后的动作,例如支付完成跳转一个成功的页面finish();也许是用户取消,和异常的支付失败,可以在这个逻辑中去请求订单的状态是怎么样的。8.最后一个问题就是关于微信开放平台签名的问题。只要你手机上的程序的签名和你在微信平台登记的签名一致即可,无论是debug版本,还是release版本,都是可以的,默认都可以用release的签名
到这微信支付就愉快的结束了
支付宝支付,这个比微信稍微简单那么点,同样在请求参数服务端返回的情况下
在这个平台申请我们的支付功能:
注意一点就是个人不能申请的,只能是企业,so 我demo里面的用的一些资料也是demo里面的
1.进入支付宝开放平台,注册账户并登录。
支付宝移动支付
2.登录成功后,点击管理中心创建应用(创建应用时,注意命名规范)。
alipaySdk-.jar 和
alipay_demo
将demo里面的alipaySdk-.jar拷贝到我们工程的libs下,并添加到依赖中
跟微信一样在清单文件中注册下这两个Activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"&
&/activity&
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"&
&/activity&
3.设置应用公钥
4.生成密钥
5.点击上方的支付宝密钥生成器下载下jar包之后解压
6.点击密钥生成器之后回弹出黑窗口,等几秒之后弹出生成器窗口
7.跟微信的流程相差无几。拿到价格和订单号,就可以去请求支付的地址了,然后用这些参数回调支付
//orderNum,
orderInfo,
服务器端返回,本地生成也是OK的
private void requestAlipay(String orderNum, String orderInfo, String sign, String signType) {
// 对sign做URL编码
sign = URLEncoder.encode(sign, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
整的符合支付宝参数规范的订单信息
final String payInfo = orderInfo + "&sign=\"" + sign + "\"&sign_type=\"" + signType + "\"";
为lambda 表达式写法
Runnable payRunnable = () -& {
// 构造PayTask 对象
PayTask payTask = new PayTask(this);
// 调用支付接口,获取支付结果
String result = payTask.pay(payInfo, true);
if (null == result) {
result = "out_trade_no={" + orderNum + "}";
result += ";out_trade_no={" + orderNum + "}";
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: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map&String, String&) msg.obj);
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
case SDK_AUTH_FLAG: {
@SuppressWarnings("unchecked")
AuthResult authResult = new AuthResult((Map&String, String&) msg.obj, true);
String resultStatus = authResult.getResultStatus();
// 判断resultStatus 为“9000”且result_code
// 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
// 获取alipay_open_id,调支付时作为参数extern_token 的value
// 传入,则支付账户为该授权账户
Toast.makeText(PayDemoActivity.this,
"授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT)
// 其他状态值则为授权失败
Toast.makeText(PayDemoActivity.this,
"授权失败" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();
到这儿就支付成功了,提示用户的逻辑,我们得从服务器确认是否正在支付了,查询是否支付成功的状态。根据服务器端返回的判断码来处理支付之后的一些动作。
接入的时候有啥问题可以随时跟我谈论,我想这些会给你们一些帮助,记录就是在脑子里过一遍,也许是最好的成长。
一个诗意优雅爱音乐爱运动的程序猿APP接入支付宝和微信,跟下面经销商分账问题是如何解决的?微信和支付宝的接口是否支持分账? - 知乎68被浏览7295分享邀请回答04 条评论分享收藏感谢收起3添加评论分享收藏感谢收起查看更多回答3 个回答被折叠()}

我要回帖

更多关于 微信公众号接入支付宝 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信