Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 16619|Yanıt: 0

[Arayüz] C#, WeChat ödemesini uygular

[Bağlantıyı kopyala]
Yayınlandı 15.03.2019 11:59:31 | | |

Son zamanlarda WeChat resmi hesap geliştirme yapıyordum ve WeChat ödemesinde bazı sorunlar yaşadım, 3 gün boyunca kafam karıştı, ama bugün sonunda hallettim. Bu dönemde, bazı büyük tanrılara yardımları için teşekkür etmek istiyorum ve onlar sıcakken deneyimimi onlarla paylaşacağım.

WeChat Pay'i uygulamadan önce,

Sertifika için WeChat geliştirme platformuna gitmem gerekiyor, bu kimlik doğrulama ve yapılandırma bilgileri hakkında çok fazla şey söylemeyeceğim, burada ağırlıklı olarak kod seviyesinden ödeme gerçekleştirmek için anlatıyorum.

Resmi belgeler: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7.

JS'de birkaç parametreyle karşılaştığımda, ana açıklamayı vereceğim:


Geliştirme sürecinde 4 çok önemli parametre vardır: biri appid, AppSecret, apikey ve satıcı numarasıdır. Yukarıdaki js içindeki appID bunlardan biri. timeStamp bir zaman damgasıdır, 10 rakamlıdır, nonceStr rastgele bir sayıdır, 32 bit içindedir, burada en önemli iki parametre ve en çok hata yapanlar paket ve paySign'dır. Size tek tek anlatayım. Önce paketten bahsedelim, burada prepay_id kullanmamız gerekiyor, bu parametre WeChat tarafından üretilen sipariş numarasıdır, onu almak için birleşik sipariş arayüzünü çağırmamız gerekiyor. Resmi belgeler: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Dokümantasyondan da görebileceğiniz gibi, prepay_id almak için birçok parametre gereklidir ve en önemli parametrelerden biri imzadır. Not: Buradaki imza, JS'deki ödeme imzasından farklıdır. İmzalı algoritma belgesinde iki nokta var ve ben sadece iki noktayı vurguluyorum. Biri, ASCII'ye göre küçükten büyüke eklenmesi gereken parametrelerin sırası, diğeri ise apikey'nin yanlış olmaması gerektiği, bu apikey nerede? Kurulum için satıcı platformuna giriş yapın.

İmza için gereken dizileri birleştirdikten sonra, imza elde etmek için MD5 şifreleme kullanılabilir. Sonra imza ve önceki tüm parametreleri bir xml format dizesinde birleştirin ve arayüz URL adresini çağırın:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。
JS'deki son parametre olan PaySign: PaySign'dan bahsedelim. Ödeme imzası algoritması için de aynı şey geçerli, JS'deki diğer 5 parametreyi sırayla birleştirmek, ayrıca apikey, MD5 şifrelemesi, tamam.
İmza algoritması aynıdır, ancak parametre değerleri farklıdır. Dikkat edilmesi gereken bir şey var. İmza için ödeme yapılırken, rastgele nonceStr sayısı ve zaman damgası timeStamp kullanılır ve bu iki parametre imzalanırken kullanılır
Eğer bu iki parametrin değerleri JS'de aynıysa, aynı rastgele sayı ve aynı zaman damgasıdır. Neden? Belgelerde belirtilmese de, anladığım kadarıyla ödeme imzaları rastgele sayılar ve zaman damgalarıyla oluşturuluyor,
Ödeme yaparken, rastgele numara, zaman damgası ve ödeme imzasını birlikte gönderin, ardından WeChat doğruladığında, JS'deki rastgele sayı ve zaman damgasına göre imza oluşturulur ve gönderdiğiniz ödeme imzası ile karşılaştırılır.
Yeni rastgele sayı ve zaman damgasını js ile yeniden alırsanız, hesaplanan imza gönderdiğiniz imzadan farklı olur ve bir hata bildirilir: imza başarısız oldu.

Kod seviyesi için bu kadar, tabii ki birkaç başka nokta daha var. Örneğin, faydalı openid parametresi arayüz çağrısı ile ve ödeme yetkilendirme dizininin doğru yapılandırılıp yapılandırılmadığı ile de elde edilmelidir.
Son cümle özeti: Belgeye dikkatlice bakın ve sonunda başkalarına sorun, WeChat ödeme ile ilgili gruplar bulabilirsiniz, içinde birçok tanrı var, daha önce bir sorunla karşılaştım ve 2 gün boyunca çözemedim, (bazen sadece belgeye bakmak yeterli olmuyor),
Sonra öfkeyle 8 WeChat geliştirme grubu ekledi ve sonunda uzmanların rehberliğinde ortaya çıktı. Tekrar teşekkürler. Programcılar, paylaşmayı seven bir grup insandır ve bildiklerini paylaşmaktan fazlasıyla memnun olurlar. Anlamıyorsanız, daha fazlasını sorun.






Önceki:C# WeChat arayüzünün push şablonu mesaj fonksiyonuna örnek
Önümüzdeki:Büyük şirketlerin müşteri hizmetleri sistemine karşı hissediyorum
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com