Android支付宝微信支付

1.微信支付

1.1微信开放平台开通支付功能,填写应用包名签名,获取appkey,appserver

1.2添加微信sdk

//腾讯sdk
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.4.0'

1.3添加微信支付回调在项目包名下创建wxapi包名,创建回调类

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.app.yanchuwang.R;
import com.app.yanchuwang.bean.EventMessageBean;
import com.app.yanchuwang.urls.Urls;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import org.greenrobot.eventbus.EventBus;

public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

    private static final String TAG = "fate";
    private IWXAPI mWxApi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxpay_entry);

        mWxApi = WXAPIFactory.createWXAPI(this, "微信appKey");
        mWxApi.handleIntent(getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        mWxApi.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    /**
     * 得到支付结果回调
     */
    @Override
    public void onResp(BaseResp baseResp) {
        Log.d(TAG, "onPayFinish, errCode = " + baseResp.errCode);// 支付结果码
        switch (baseResp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                Log.i(TAG, "支付成功");
                // 还需要向商户后台请求支付结果,最终结果以后台返回结果为准
                EventMessageBean bean = new EventMessageBean(Urls.CODE_PAY_SECCESS,"success");
                EventBus.getDefault().post(bean);
                finish();
                break;
            case BaseResp.ErrCode.ERR_COMM:
                // 发生错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、
                // 注册的APPID与设置的不匹配、其他异常等。
                Log.i(TAG, "发生错误");
                Toast.makeText(WXPayEntryActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                finish();
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                // -2 用户取消 发生场景:用户不支付了,点击取消,返回APP。
                Log.i(TAG, "用户取消");
                EventMessageBean bean1 = new EventMessageBean(Urls.CODE_PAY_ERROR,"error");
                EventBus.getDefault().post(bean1);
                finish();
                break;
            default:
                Log.i(TAG, "支付失败-其他的锅" + baseResp.errCode);
                break;
        }
    }
}

Manifest.xml中添加

 <!--微信支付权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<activity   android:name="com.app.yanchuwang.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/Theme.AppCompat.Dialog"></activity>

1.4 微信支付请求后台,后台返回支付参数paybean就是后台返回的支付参数,拼接之后调用支付就行了

    private IWXAPI mWxApi;
  mWxApi = WXAPIFactory.createWXAPI(this, null);
        mWxApi.registerApp("微信appid");

            Gson gson = new Gson();
            PayBean payBean = gson.fromJson(json, PayBean.class);
            String appid = payBean.getAppid();//appID
            String nonce_str = payBean.getNonce_str();//随机字符串
            String packageValue = "Sign=WXPay";//Sign=WXPay";扩展字段,这里固定填写Sign=WXPay
            String partnerid = payBean.getMch_id();//商户Id
            String prepayid = payBean.getPrepay_id() + "";//预支付交易会话ID
            String sign = payBean.getSign2();//签名
            String timestamp = payBean.getTime() + "";//时间戳
            if (!TextUtils.isEmpty(appid) && !TextUtils.isEmpty(nonce_str) && !TextUtils.isEmpty(packageValue) && !TextUtils.isEmpty(partnerid)
                    && !TextUtils.isEmpty(prepayid) && !TextUtils.isEmpty(sign) && !TextUtils.isEmpty(timestamp)) {
                PayReq request = new PayReq();
                request.appId = appid;
                request.partnerId = partnerid;
                request.prepayId = prepayid;
                request.packageValue = packageValue;
                request.nonceStr = nonce_str;
                request.timeStamp = timestamp;
                request.sign = sign;
                mWxApi.sendReq(request);
            }

支付失败一般返回-1,1.查看后台返回参数时候有问题参数不能为空,2.查看签名包名appid是否填写正确

二.支付宝支付

2.1支付宝支付较为简单libs中导入alipaySdk-xxxxxx.jar包,右键add as library初始化添加jar包

2.2调用支付宝支付后台会回调支付参数,一个特别长的字符串json

   if (!TextUtils.isEmpty(json)) {
                PayTask alipay = new PayTask(MainActivity.this);
                Map<String, String> result = alipay.payV2(json, true);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }

2.3支付回调处理

  private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    @SuppressWarnings("unchecked")
                    PayResultBean payResult = new PayResultBean((Map<String, String>) msg.obj);
                    /**
                     *  对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                        webView.loadUrl("javascript:paySuccess()");
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        webView.loadUrl("javascript:payError()");
                    }
                    break;
                }
            }
        }
    };

 2.4bean

package com.rhkj.kemizhibo.bean;

import android.text.TextUtils;

import java.util.Map;

/**
 * Created by dell on 2019/10/14.
 */

public class PayResultBean {
    private String resultStatus;
    private String result;
    private String memo;

    public PayResultBean(Map<String, String> rawResult) {
        if (rawResult == null) {
            return;
        }

        for (String key : rawResult.keySet()) {
            if (TextUtils.equals(key, "resultStatus")) {
                resultStatus = rawResult.get(key);
            } else if (TextUtils.equals(key, "result")) {
                result = rawResult.get(key);
            } else if (TextUtils.equals(key, "memo")) {
                memo = rawResult.get(key);
            }
        }
    }

    @Override
    public String toString() {
        return "resultStatus={" + resultStatus + "};memo={" + memo
                + "};result={" + result + "}";
    }

    /**
     * @return the resultStatus
     */
    public String getResultStatus() {
        return resultStatus;
    }

    /**
     * @return the memo
     */
    public String getMemo() {
        return memo;
    }

    /**
     * @return the result
     */
    public String getResult() {
        return result;
    }
}

2.3mainfest配置

<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" /> 
<!-- 支付宝支付 -->
        <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" />

支付宝android 文档jar包可以去这下

https://docs.open.alipay.com/54/104509

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值