GVKun编程网logo

微信支付开发的一些问题,获取到 prepayId 之后仍然无法 H5 调起支付的问题

12

在本文中,我们将为您详细介绍微信支付开发的一些问题,获取到prepayId之后仍然无法H5调起支付的问题的相关知识,此外,我们还会提供一些关于android微信分享、微信支付的一些坑、Android微

在本文中,我们将为您详细介绍微信支付开发的一些问题,获取到 prepayId 之后仍然无法 H5 调起支付的问题的相关知识,此外,我们还会提供一些关于android微信分享、微信支付的一些坑、Android微信支付开发问题、Android微信支付的问题、h5调起微信支付的有用信息。

本文目录一览:

微信支付开发的一些问题,获取到 prepayId 之后仍然无法 H5 调起支付的问题

微信支付开发的一些问题,获取到 prepayId 之后仍然无法 H5 调起支付的问题

     微信支付需要我们在商户平台设置一个 key 的值,用来签名的关键数值

根据微信签名的规则,所有提交到服务器的参数,需要使用 key1=value1&key2=value2&....

的这种形式拼接成一个 stringA,然后 stringA&key=[设置的 key]

然后 MD5,就可以得到一个 signaure,注意参数拼接的时候顺序为从小到大排列。

     这里其实可以使用 Java 的集合 TreeMap 轻松做到,TreeMap 遍历 Key 的时候就已经是从小到大排好的了

但是我在开发的时候犯了一个错,把 key 也放进 TreeMap 里面了,结果 key 也按照从小到大排列了

但是实际上规则要求 key 是在所有参数拼接之后,再拼接进行 Hash 的。

     微信支付首先第一个流程是获取 prepayid 这里需要进行一次 Hash,然后如果你是 H5 支付的话,

那么 H5 支付的时候还需要进行第二次 Hash,我这里犯的第二个错就是

在获取 prepayid 进行第一次 Hash 的时候,使用 H5 支付,并没有加入 key 做最后的 Hash。

结果导致支付的时候,微信客户端闪了一下支付,然后就取消了。而微信并没有给予任何错误提示,是很难留意到自己是因为 key 的问题导致挂起支付失败的。一开始以为是微信支付配置那里的域名问题,结果并不是域名问题。微信的 js api 也已经 ready 状态成功了,js ticket 也是成功的了。

     后来 github 上搜索到 wechat4j 看了人家的 H5 支付,发现原来是我这边少了一个 key。

    总的来说就两个失误,第一个就是涉及微信支付的都必须 Hash,Hash 的时候最后面必须携带 key,参与 Hash 的参数从小到大排序拼接。第二个就是 key 不参与参数的排序。

android微信分享、微信支付的一些坑

android微信分享、微信支付的一些坑

微信登陆、分享做了一段时间了发现的一些坑:
1.首先,Android应用除了获取AppID外,应用还要通过审核,否则无法调起微信进行分享,并且需要在网站上填写包名和签名两个字段,签名可使用签名生成工具获取。如有特殊需要,请自行参见《Signature的生成方法》生成。
见微信开放平台-->移动应用-->常见问题-->安卓常见问题 和 微信开放平台-->资源下载-->android资源下载-->签名生成工具下载
2.第一步的签名和包名必须写对.第二个问题,就是如何接受到微信的回调

a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity(微信支付为WXPayEntryActivity)类,该类继承自Activity()
并在manifest文件里面加上exported属性,设置为true,设置启动模式为singleTop保证它不会重复创建.
因为微信回调的时候会调起一个新的activity:WXEntryActivity,所以必须设置透明样式(不然会给用户感知到启动了一个新的activty),且在onResp方法里finish掉WXEntryActivity(WXPayEntryActivity)
例如:

<!--非要设置成透明的才不会对用户造成困扰-->
        <activity
            android:name=".wxapi.WXEntryActivity或WXPayEntryActivity"
            android:theme="@android:style/Theme.Translucent"
            android:label="@string/app_name"
            android:exported="true"
            android:launchMode="singleTop">

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="sdksample"/>
            </intent-filter>
        </activity>

b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法

c. 在WXEntryActivity(WXPayEntryActivity)中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,会相应onResp方法

Android微信支付开发问题

Android微信支付开发问题

并不是所有的BAT的API都是非常好用的,微信支付就有不少的缺陷,总结一下微信支付实现中出现的问题

  坑点一:

  PayReq的参数 sign的生成

  PayReq对象有个参数为packageValue

而sign生成时要用到packageValue,但是对应的Key是package,这里的key容易弄错

复制代码 代码如下:

List<NameValuePair> signParams = new LinkedList<NameValuePair>();
        signParams.add(new BasicNameValuePair("appid",req.appId));
        signParams.add(new BasicNameValuePair("noncestr",req.nonceStr));
        signParams.add(new BasicNameValuePair("package",req.packageValue));
        signParams.add(new BasicNameValuePair("partnerid",req.partnerId));
        signParams.add(new BasicNameValuePair("prepayid",req.prepayId));
        signParams.add(new BasicNameValuePair("timestamp",req.timeStamp));

坑点二:

支付回调方法

微信使用反射找到对应的类并实现的回调

微信官方给出的说明如下:

参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。

意思如下:

1、你要在创建个packageName+.wxapi的包,如:你的项目报名:com.android.qq,那你要在该包名下创建个wxapi的包

2、在该包下创建个名为 WXPayEntryActivity的Activity类,并实现 接口 IWXAPIEventHandler ,支付的回调就在该接口的 onResp(BaseResp resp)方法中进行

复制代码 代码如下:

package com.android.qq.wxapi;
 
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
 

    @Override
    public void onResp(BaseResp resp) {
        //处理支付回调
        }
 }


三:签名测试

这个算不上坑点洛,很多第三方都要这样才可测试

支付的测试必须对应签名的包,否则无法测试支付功能

以上内容就是Android微信支付开发问题,希望对大家有所帮助。

Android微信支付的问题

Android微信支付的问题

有三种角色:平台、商家、用户

在Android上开发微信支付,用户在平台上支付,直接支付给商家,请问平台还需要申请微信支付的资质吗?还是用商家的资质,多个商家怎么处理,请有相关经验的大牛给予解答,急求,多谢!

h5调起微信支付

h5调起微信支付

后台需要进行生成签名获取参数。

前台代码:

function onBridgeReady(appId,timeStamp,nonceStr,package1,paySign,signType,openId){
WeixinJSBridge.invoke(
''getBrandWCPayRequest'', {
"appId":appId, //公众号名称,由商户传入
"timeStamp":timeStamp, //时间戳,自1970年以来的秒数
"nonceStr":nonceStr, //随机串
"package":package1,
"signType":signType, //微信签名方式:
"paySign":paySign //微信签名
/* "appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入
"timeStamp":"1395712654", //时间戳,自1970年以来的秒数
"nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串
"package":"prepay_id=u802345jgfjsdfgsdg888",
"signType":"MD5", //微信签名方式:
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 */
},
function(res){

if(res.err_msg == "get_brand_wcpay_request:ok" ){

//window.location.replace("@Url.Content("~/WxPay/Success?ordercode=@(Model.order_no)"));
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener(''WeixinJSBridgeReady'', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent(''WeixinJSBridgeReady'', onBridgeReady);
document.attachEvent(''onWeixinJSBridgeReady'', onBridgeReady);
}
}else{
onBridgeReady();

我们今天的关于微信支付开发的一些问题,获取到 prepayId 之后仍然无法 H5 调起支付的问题的分享已经告一段落,感谢您的关注,如果您想了解更多关于android微信分享、微信支付的一些坑、Android微信支付开发问题、Android微信支付的问题、h5调起微信支付的相关信息,请在本站查询。

本文标签:

上一篇JFinal 极速开发微信公众号(java公众号开发)

下一篇传媒梦工场信息总监朱晓鸣:看好微信O2O模式(朱晓宣传片)