支付宝支付和微信支付,1错误码踩坑之旅

支付模块其实很已经做完了的,只是那时候说必要银联支付,计划一齐做完再写的,结果昨日说银行职员联合会支付不做了,好咯现在也没什么人用银行职员联合会支付这一个坑爹的事物了·····别的还也许有正是懒癌发作了所以拖到未来,不说废话了。

一、引言

微信支付文档写的着实棒啊!少林武术真的好啊!
世代猜不到-1错误码是啥难点。

图片 1

文书档案写的棒呀

证实下,本文讲的是在后台湾学生成支付密钥的意况下采用,实际上一般也差异意你和煦生成的。

合克罗地亚语档地址,其实官方文书档案讲的挺清楚了,作者记下下简化版而已

第一增添正视·······compile files('libs/alipaySdk-20161009.jar')

下一场就足以用了······因为作者从不步入网页支付,也正是说手提式有线电话机上必得有所支付宝手艺动用,那是最最简单易行的秘籍

//支付宝回调private final int SDK_PAY_FLAG = 1; * call alipay sdk pay. 调用SDK支付 */public void alipay(final String payInfo) { //这里的payInfo是后台返回的,前端不用关心,用就是了,错了是后台的问题 Runnable payRunnable = new Runnable() { @Override public void run() { PayTask alipay = new PayTask(PayPhotoActivity.this); Map<String, String> result = alipay.payV2(payInfo, true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage; } }; Thread payThread = new Thread(payRunnable); payThread.start();}

上边是利用的,接着是回调

@SuppressLint("HandlerLeak")private Handler mHandler = new Handler() { @SuppressWarnings public void handleMessage(Message msg) { switch  { 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")) { // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。 //这里是支付成功,做后续操作 } else { // 该笔订单真实的支付结果,需要依赖服务端的异步通知。 showToast; } break; } default: break; } }};

好了支付宝的支付就是如此轻松,简单到没人性······(曾经笔者觉着不轻松来着)

二、注意事项

接下去是微信支付,这些略坑

导包,嘲讽下那些名字······compile files('libs/libammsdk.jar')

![这样的]UU.png]()

其一类里面是那样子的

 public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler { private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity"; private IWXAPI api; private PayLongActivity payLongActivity ; // APP_ID 替换为你的应用从官方网站申请到的合法appId public static final String APP_ID = "11111111111111"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pay_result); api = WXAPIFactory.createWXAPI(this, APP_ID); api.handleIntent(getIntent; } @Override protected void onNewIntent(Intent intent) { super.onNewIntent; setIntent; api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if (resp.errCode==1) { sendBroadcast(new Intent(ConstantsConfig.ReceiverConfig.WX_PAY_SUCCESS));//成功广播 } else sendBroadcast(new Intent(ConstantsConfig.ReceiverConfig.WX_PAY_FAIL));//失败广播 finish(); } }

没什么用的本身都删了,当然是对自家来说没什么用这里嘲讽下微信支付回调要别的弹出那几个Activity,来告诉您成功照旧败诉,差非常的少影响体验······所以作者修改成用广播通告,这么些分界面直接finish掉。其实依照小编的习于旧贯用哈弗xBus最棒最有利于了,从前有写过的,那么些类型差异意固然了,后续回调你们本人望着来吧。

好,我们承袭,这里是回调,接下去讲使用:

一点差异也未有于支付的数码都要从后台拿,微信的数额也是还要本人深入分析···小编直接把json传进来了,反正你借使把req里面包车型地铁那多少个参数赋值对了就行,怎么传过来都好

 private void wxpay(JSONObject json) throws JSONException { IWXAPI wxapi = WXAPIFactory.createWXAPI(this, null); //这个跟回调那里一样要拿到后台申请的那个ID wxapi.registerApp("11111111111"); if (null != json && !json.has("retcode")) { PayReq req = new PayReq(); //req.appId = "wxf8b4f85f3a794e77"; // 测试用appId req.appId = json.getString; req.partnerId = json.getString("partnerId"); req.prepayId = json.getString("prepayId"); req.nonceStr = json.getString("nonceStr"); req.timeStamp = json.getString("timeStamp"); req.packageValue = json.getString("packageValue"); req.sign = json.getString; req.extData = "app data"; // optional// Toast.makeText(PayPhotoActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show(); // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信 wxapi.sendReq; } else {// Toast.makeText(PayPhotoActivity.this, "返回错误"+json.getString, Toast.LENGTH_SHORT).show(); } }

好,微信代码里面包车型地铁就到那边,那还不算坑,还过的去

难点出在要布局后台····

图片 2就是以此坑爹的事物

包名好说,复制粘贴就好

说的是运用具名

AS里面获得MD5的章程

获得后应当是那般的 81:6F:96:F7:2F:AE:7D:04:D4:73:F9:C5:EB:1C:4C:83

大家要吧冒号整体去掉,然后字母整体成为小写去掉冒号多少个txt自行化解816F96F72FAE7D04D473F9C5EB1C4C83然后本人是用AS的迅猛键 ctrl+shift+U 消除的,你们有好的艺术也行·······816f96f72fae7d04d473f9c5eb1c4c83好了那一个就是填上去的利用签字了

1.在开放平台绑定专营商的使用具名不像别家SDK使用签字文件的sha1值,而是利用MD5值。並且要去掉中间全部的 " : " 冒号 ,最棒土耳其共和国语字母改成小写。

顺便介绍下具名文件:


debug.keystore:
在Android Stduio中系统默许内置了贰个签名文件debug.keystore,用于大家在debug下的暗中同意App签名。

  • 在Windows系统中,debug.keystore文件将暗中认可存款和储蓄在C:Users{USERNAME}.android路径下。

  • 在Mac/Linux系统中,debug.keystore文件暗中认可积存在~/.android/路径下。

release.keystore:
由客商自身生成


获取签字信息:

开拓Computer终端,输入以下命令:

keytool -list -v -keystore debug.keystore -keypass android

能够见到签字音讯的MD5、sha1、sha256值。微信支付供给的正是MD5的去冒号小写版。比方本机:7a1ec4f306acb66ad869251f91b9c341。

图片 3

签定新闻

也足以在Android Studio尾部tools window中的terminal中敲命令

图片 4

terminal

留心那只是编写翻译版本的

包裹后你要重新配置,签名正是拿签字文件keystore里面包车型客车,获取格局嘛cmd里面用那么些代码 ***.keystore 为文件路线keytool -v -list -keystore ***.keystore

那坑爹的事物没有布署对的话,第四回调用微信支付是足以的,然后第一遍就特别了,那时死命找原因才开掘是那几个地方的主题材料,话说那个也要大家弄也是坑······

好了支付宝支出和微信支付的就像此点东西,其实并简单······

随之,小编想再也找家公司了,有人愿意要自身或然帮衬内推下的么,有愿意辅助的私信下自家嘛,特别谢谢~

最终来句迟来的

2.支付结果回调应当要有[你的包名].wxapi下WXPayEntryActivity类。

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText("支付结果");
        setContentView(tv);
        api = WXAPIFactory.createWXAPI(this, Constants.WECHAT_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 baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {
        Log.d("WXPayEntryActivity", "errCode = " + baseResp.errCode);
        if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            ToastUtils.showToast("errCode = " + baseResp.errCode);

            switch (baseResp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    ToastUtils.showToast("成功");
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    ToastUtils.showToast("取消");
                    break;
                default:
                    ToastUtils.showToast("未知错误");
                    break;
            }
            finish();
        }
    }
}

清单文件AndroidManifest.xml中WXPayEntryActivity的扬言配置:

        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop">
        </activity>

祝我们新禧好运吧

3.关于八个sign参数

  • 第三个sign: 客户去“微信商行平台下单” 参数封装成四个xml,当中sign参数为:MD5(全体参数排序后+ key=微信厂商平台的密钥)。

  • 其次个sign: “微信商家平台”下单后,再次回到的sign,用于协和平台上对此微信重临的多少做校验(相当于校验码)。千万别拿这么些sign去运转“微信应用程式”支付(要不然就出提醒:errCode = -1 的一无是处)。

  • 其三个sign:须要把下单成功后的参数appid,partnerid,prepayid,package,noncestr,timestamp举行签字(sign),签字的平整和第二个sign法规类似,为:MD5(那6个参数排序后+ key=微信厂商平台的密钥)。

errCode -1:具名错误,所说的签署便是第1个sign。当然还应该有应用程式ID未通过,和应用软件ID注册的和重回的区别等,那些是“微信开放平台”里的事物。

4. 友情提示:注意各次调用微信接口的归来参数名和伸手参数名有一点近乎(有的在id前有下划线)不过参数名不一样等。没留神的话就能招致sign具名不准确

本文由华夏彩票发布于编程应用,转载请注明出处:支付宝支付和微信支付,1错误码踩坑之旅

您可能还会对下面的文章感兴趣: